아직 해결 방법이 필요한 사람이 있는지는 확실하지 않지만 제대로 작동하려면 좋은 방법을 찾았습니다.
UIDocument는 Data를 NSData 또는 NSFilewrapper로만 받아들이므로 NSData에서 NSDictionary를 반환하는 NSDictionary 클래스에 대한 Category를 처음 만들었습니다.
있는 NSDictionary + DictFromData.h :
#import <Foundation/Foundation.h>
@interface NSDictionary (DictFromData)
+ (id)dictionaryWithData:(NSData *)data;
- (id)initWithData:(NSData *)data;
@end
하고있는 NSDictionary + DictFromData.m
#import "NSDictionary+DictFromData.h"
@implementation NSDictionary (DictFromData)
+ (id)dictionaryWithData:(NSData *)data {
return [[[NSDictionary alloc] initWithData:data] autorelease];
}
- (id)initWithData:(NSData *)data {
NSString *tmp = nil;
self = (NSDictionary *)[NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:NSPropertyListImmutable
format:NULL
errorDescription:&tmp];
NSAssert1(tmp == nil,@"Error in plist: %@",tmp);
return [self retain];
}
@end
(source)
당신이 만약 지금 수입 여기에 범주에 대한 두 파일을입니다 UIDocument Subclass의이 카테고리를 사용하면 plist 파일을 iCloud 컨테이너에 쉽게로드하고 저장할 수 있습니다.
가 iCloud에 당신의 UIDocument 서브 클래스에이 추가에서 PLIST를로드하려면 (속성 내용은있는 NSDictionary입니다) :
- (BOOL)loadFromContents:(id)contents
ofType:(NSString *)
typeName error:(NSError **)outError {
if ([contents length] > 0){
self.contents = [NSDictionary dictionaryWithData:contents];
} else {
self.contents = nil;
}
// call some Methods to handle the incoming NSDictionary
// maybe overwrite the old Plist file with the new NSDictionary
return YES;
}
이 추가 다시 아이 클라우드에 데이터를 저장하는 경우 :
- (id)contentsForType:(NSString *)typeName error:(NSError **)outError {
NSData * plistData = [[[NSData alloc]initWithContentsOfFile:YOUR_PLIST_FILE]autorelease];
return plistData;
}
을 지금 전화 할 경우 :
[myUIDocument updateChangeCount:UIDocumentChangeDone];
YOUR_PLIST_FILE이 (가) 동기화 중입니다. iCloud 컨테이너를 업데이트하는 데 약 10-15 초가 걸립니다.
답변을 찾으셨습니까? 나는 똑같은 일을 할려고하고 있는데 내 앱은 너와 아주 비슷하게 들린다. 좋은 가이드를 찾았 으면 알려주세요. – Jackson
나는 또한 이것을 성취하려고 노력하고있다.NSString을 사용하여 자습서를 수정했지만 두 번째 장치에서 데이터를 볼 수 없습니다. – zambono
. +1 to poster – autodidakto