2011-12-12 7 views
4

정의의 배열을 포함하는 아카이브를 저장하는 방법 객체 :iCloud에 내가 포함 된 사용자 정의 객체의 배열을 보관 통해 아이폰 OS에서이 로컬로 저장 작은 응용 프로그램을 개발

@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *dateCreated; 
@property (nonatomic, copy) NSString *desc; 
@property (nonatomic, copy) NSString *url; 
내가 동기화 할

아카이브가 아이 클라우드 등을 이용하여 상기 권장 된 메커니즘은 UIDocument 하위 클래스를 통해 이루어집니다. 모든 UIDocument 예제는 하나의 단일 NSString을 사용하여 단일 인스턴스를 생성 했으므로 사용자 정의 개체의 전체 배열을 동기화하는 방법에 대해 약간 혼란 스럽지만 UIDocument (현재 NSCoding을 통해 로컬로 수행하는 것처럼)를 사용하는 방법에 대해 혼란스러워합니다.

위에 나열된 속성을 포함하는 UIDocument 개체의 배열을 만들어야합니까? 위에서 설명한 데이터 개체의 인스턴스 1 개를 포함하는 UIDocument의 인스턴스를 만든 다음 모든 인스턴스를 포함하는 배열을 만들거나 하나의 단일 UIDocument에 포함해야합니까? 사용자 정의 객체의 완전한 배열?

나는 약간 연구를했지만 아직도 혼란 스럽다. 결국 내가 말한 사용자 지정 개체의 배열을 포함하는 단지 하나의 파일을 동기화해야합니다. 당신의 도움에 미리

감사

는 내가 오늘이 것은 내가있는 NSMutableArray 내가 그 각각의 새로운 인스턴스를 추가 목록을 불리는이 코드 조각이라는 4 문자열 위의 내 루트 뷰 컨트롤러에 설명 된대로 사용자 정의 클래스이다 스 니펫 클래스.

self.list = [[NSMutableArray alloc] init]; 
Snippet *newEntry = [[Snippet alloc] init]; 
[self.list addObject:newEntry]; 

사용자 지정 개체의 배열을 소유하는 UI 문서 하위 클래스를 만들어야합니까?

답변

2

실제로 example in the docs은 하나의 문자열을 가진 UIDocument 하위 클래스를 표시하지만 -contentsForType:error:에서 NSData를 반환합니다. NSKeyedArchiver를 사용하여 NSData에 원하는만큼의 객체를 저장할 수 있습니다. Serializing Objects을 읽어 NSKeyedArchiver를 사용하여 객체를 인코딩하는 방법을 배우십시오 (그리고 다시 읽는 방법을 배우려면 계속 읽으십시오). 예를 들어 당신의 재산을 사용

...

@interface MyDocument : UIDocument 
{ 
} 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *dateCreated; 
@property (nonatomic, copy) NSString *desc; 
@property (nonatomic, copy) NSString *url; 
@end 

@implementation MyDocument 

//... 

- (id)contentsForType:(NSString *)typeName error:(NSError **)outError 
{ 
    NSMutableData *data = [NSMutableData data]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:name forKey:@"name"]; 
    [archiver encodeObject:dateCreated forKey:@"created"]; 
    [archiver encodeObject:desc forKey:@"desc"]; 
    [archiver encodeObject:url forKey:@"url"]; 
    [archiver finishEncoding]; 
    // release archiver if you're not using ARC 
    return data; 
} 
@end; 

경고 : 나는 위의 코드를 컴파일, 그래서 보장하지 않았습니다. 이는 아카이버를 사용하여 하나의 데이터 객체에 여러 객체를 저장하는 것을 설명하는 예제로 사용되어야합니다.이 객체는 문서의 내용으로 반환 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 그래서 당신이 올바르게 이해한다면 + (NSData *) archivedDataWithRootObject를 사용할 수 있습니다 : (id) rootObject를 배열에 넣은 다음 - (id) contentsForType : (NSString *) typeName 오류 : (NSError **) 전체 배열을 1로 저장하는 outError UIDocument의 단일 인스턴스 – Will

+0

이 경우 UIDocument를 어떻게 선언하겠습니까? – Will

+0

무슨 배열에 대해 말하는 건지 모르겠다. 위의 스 니펫을 추가하여 도움을줍니다. – Caleb