본문 바로가기

옛글/아이폰 프로그래밍

[iOS프로그래밍] NSArray와 NSString (문장 잘라내기)

반응형


NSArray는 많이 쓰이는 클래스이기도 하며, 현재 제작중인 "전생에 우리는" 아이폰 버전에서는, 배열안의 문장들을 나열하고 그 문장 중 랜덤으로 임의의 문장을 뽑아 문장 안에 사용자가 (EditText에 쓴) 문자를 받아와서 문장안에 넣어야 합니다. 


 이를테면, " 120년 전 |님과 |님은 친구였습니다" 라는 배열안의 문장을 뽑아온다면, 

|에 사용자가 넣어놓은 변수를 받아와서 저 부분에 넣어야 하는 문제에 부딪쳤습니다. 


먼저 이럴 때 사용되는 클래스는 NSArray 와 NSString 입니다. 

이론적으로 |을 찾아내서 |을 기준으로 5부분 (120년전 , | , 님과 , | , 님은 친구였습니다)라고 나눈 뒤에 두번째와 네번째에 다른 변수를 넣을 예정입니다. ( 변수자체를 넣는 방법도 있다고 하는데.. 좀 더 찾아 본 뒤 포스팅 하도록 하겠습니다. ) 


 먼저 랜덤으로 문장 내에 한 문장을 뽑아냅니다. 



 int r; 

r = rand()%4; // 0~4까지의 숫자 중 임의의 숫자를 랜덤으로 뽑아낸다. 


NSString *originaldata = [이미 만들어놓은 문장 배열 cobjectAtIndex:r]; // 이미 만들어놓은 문장 배열 중 랜덤으로 뽑은 인덱스 값에 해당하는 문장을 불러온다. 

NSArray *separatedstring = [originaldata componentsSeparateByString:@"|"]; // |으로 문장 내를 나눈다. 

NSString *lastString [NSString stringwithFormat:@"%@%@%@%@%@", [separtedstring objectAtIndex:0],

                               toSendTextField.text, [separtedstring objectAtIndex:1], fromTextField.text, [separtedstring objectAtIndex:3]];

//5개로 나누었던 문장에서 0, 1, 2 값을 맞게 배치하고 |의 자리에는 TextField의 값을 대입한다. 



위와 관련해서 좀 더 NSArray를 자세히 파해쳐 보면, NSArray 는 NSObject를 상속하며, 저장할 모든 객체와 함께 생성이 됩니다. 

 NSArray 인스턴스에서는 객체를 제거하거나 삽입할 수가 없습니다 (저같은 경우는 임의대로 문장을 추가하거나 삭제할 수가 없다는 이야기가 됩니다) 즉 성질이 '변경이 불가능한(immutable)'이므로, 이러한 단점을 극복하기 위해 변경할 수 있는 서브클래스인 NSMUtableArray가 존재 합니다. 


 변경할 수 없다는 점 때문에 특정 경우에 많이 사용이 되는데, (이를테면 전생에 우리는 같이 문장이 이미 정해져있고 더 이상 수정을 하지 않아도 될때) NSArray에서 많이 사용되는 메서드에 대해서 간단하게 알아보면, 


 - (unsigned)count : 현재 배열의 객체 수를 리턴

 - (id) objectAtIndex:(unsigned)i : i에 있는 배열을 리턴한다. 

 - (id) lastObject : 배열의 마지막에 있는 객체를 리턴, 배열이 비어있으면 nil을 리턴

 - (BOOL) containObject:(id)anObject : 만약 anObject 가 있다면  YES를 리턴하며, 각 객체에 현재 배열에 anObject가 있는지 확인함.


NSString 은 유니코드 문자열의 버퍼로, 코코아에서는 모든 문자열 처리를 NSString에서 처리하며, Objective-C 에서는 @"string값" 으로 문자열 객체를 생성합니다. 


 NSString *temp = @"this is instans";


 NSString 역시 NSObject를 상속하며, 자주 사용되는 메서드는,


 - (id)initWithFormat:(NSString *)format, ...   : 

 - (unsigned int)length : 문자의 수를 리턴한다.

 - (NSString *)stringByAppendingString:(NSString *)aString 리시버에 aString을 덧붙여서 만든 문자열 객체를 리턴. 


 위의 두 클래스에 대한 포스팅은 마치겠습니다 ^^ 

반응형