2012-06-07 3 views
8

저는 RSS 리더에서 작업하고 있습니다. 그것은 단지 테이블 뷰이며 각 셀은 커스텀 데이터 모델 RSSEntry를 보여줍니다. 그리고 NSMutableArray allEntries 서버에서 가져온 모든 RSSEntry가 들어 있습니다. 내가 종료하고 다시이 응용 프로그램을 열 때 국지 아카이브에서 데이터를 복원 할NSKeyedArchiver를 사용하여 사용자 정의 데이터 모델 저장

@interface RSSEntry : NSObject <NSCoding> { 
     NSString *_blogTitle; 
     NSString *_articleTitle; 
     NSString *_articleUrl; 
     NSDate *_articleDate; 
    } 

있는 tableview이 데이터를 마지막 새로 고침으로 채워집니다,이처럼 RSSEntry 보이는 것입니다.

'iOS5 프로그래밍 시작하기'의 예제를 읽었지만 하나의 데이터 모델 만 저장하고 복원합니다. 그래서 나는 커스텀 데이터 모델로 가득 찬이 가변 배열을 어떻게 저장하고 그것을 복원 할 수 있을지 모른다.

내가 저장하고 데이터를 복원하는 코드를 다음을 사용 : 만 저장하고 이런 식으로 하나 개의 데이터 모델을 복원 할 수 있습니다

// STORE 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:entry forKey:kDataKey]; 
[archiver finishEncoding]; 

// RESTORE 
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath:kFilename]]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 
RSSEntry *entries = [unarchiver decodeObjectForKey:kDataKey]; 
[unarchiver finishDecoding]; 

합니다.

나를 도와 줄 수있는 사람. 나는 iOS 프로그래밍에 익숙하지 않다. 어쩌면 조금 엉망이다.

답변

14

놓고이 코드를 NSArray에 저장하고 사용하고자하는 모든 항목을 다음과 같이있는 NSDictionary를 저장할 수 : entries이 항목의 배열입니다

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:entries]; 

. 멋지고 쉬운 코드 줄. 보관 해제

, 단지

NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

NSKeyedArchiver은 오브젝티브 C로, 데이터 구조, 심지어 매우 복잡한 일을 보관 할 수있는 사용하는 것은 NSArray의, NSDictionary 중첩을 포함하여 NSCoding 프로토콜를 구현 객체 s 및 사용자 지정 개체를 파일에 저장합니다. NSKeyedUnarchiver은 역순으로, NSKeyedArchiver에 의해 생성 된 데이터를 취하여 아카이브 된 원래 오브젝트 그래프를 다시 설정합니다. 기술적으로, 그들은 단지 하나의 클래스 일 수 있지만, 문법적으로 정확하거나 뭔가가 있기 때문에 애플은 기능별로 분리하기로 결정했습니다. :)

결과로 NSData 개체를 파일에 쓰고 읽을 수 있다고 가정합니다 다시.

+0

왜 그런지 모르지만이 답변은 동일하게 보이는 다른 모든 것들이 작동하지 않을 때 작동합니다. - 감사합니다. –

3

당신은

NSDictionary *Your_NSDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"Obj1", @"Key1", 
           @"Obj2", @"Key2", nil]; 
//store dictionary 
NSMutableData *yourData = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:yourData]; 
[archiver encodeObject:Your_NSDictionary forKey: @"key"]; 
archiver finishEncoding]; 
[yourData writeToFile:@"FilePath" atomically:YES]; 
[yourData release]; 
[archiver release]; 


//Load dictionary 

NSData *yourData = [[NSMutableData alloc]initWithContentsOfFile:@"FilePath"]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:yourData]; 
Your_NSDictionary = [unarchiver decodeObjectForKey: @"key"]; 
[unarchiver finishDecoding]; 
[unarchiver release]; 
[yourData release]; 
관련 문제