2011-03-27 8 views
2

가정하자 나는이NSDictionary의 NSArray (NSCoding 포함)를 어떻게 보관합니까?

wordList = [[NSMutableArray alloc] init]; 
while ([rs next])  //Some database return loop 
{ 
    wordDict = [[NSMutableDictionary alloc] init]; 

    [wordDict setObject:[NSNumber numberWithInt:[rs intForColumn:@"id"]] forKey:@"id"]; 
    [wordDict setObject:[rs stringForColumn:@"word"] forKey:@"word"]; 

    [wordList addObject: wordDict]; 

    [wordDict release]; 
    wordDict = nil; 
} 

같은 배열의 데이터를 보유하고있다하지만 나중에 사용하기 위해 SQLite는이 결과 (즉, 단어 목록)를 저장할 - 나는 NSCoding를 사용하여 같아요. 내가 어떻게 그럴 수 있니? (문제가있는 경우 물건을 할당하는 방법에 오류가 있음을 알려주십시오).

답변

3

NSCoding을 사용하여 직렬화를 주장하지 않으면 NSArrayNSDictionary에 모두 writeToFile:atomically: 메서드가 있습니다. 개체를 속성 목록 (*.plist)으로 serialize합니다. 유일하게 잡히는 "트리"의 모든 객체는 NSString, NSData, NSArray 또는 NSDictionary이어야합니다 (문서 참조). 나는 NSNumber이 어떻게 들어 맞는지 모르겠다. 그러나 약간의 운이 있으면 직렬화되고 비 직렬화 될 것이다. 파일을 다시 사전이나 배열로 변환하는 역 방법은 initWithContentsOfFile:입니다.

코드의 경우 자동 완성 된 사전을 얻는 편리한 방법 인 [NSMutableDictionary dictionary]을 사용합니다. 그것은 보통보다 짧습니다 alloc & init 그리고 명시 적 릴리스에 대해 한 줄을 저장합니다.

+0

'NSNumber'와'NSDate' 둘 다 plists에서 잘 작동합니다. 또한 'wordDict = nil;'이 필요하지 않습니다. – amattn

+0

파일에 쓰는 대신 결과를 데이터베이스 (SQLite)에 저장하면 비슷한 것을 사용할 수 있습니까? – Gazzer

+1

속성 목록은 문자열이며 거의 모든 위치에 저장할 수 있습니다. 나는 그것이 최선의 아이디어인지 확실치 않습니다. 당신은 정말로 무엇을하려고합니까? – zoul

관련 문제