解決策がまだ必要な人がいるかどうかはわかりませんが、これをうまく利用するには良い方法があります。
UIDocumentはDataをNSDataまたはNSFilewrapperとしてのみ受け入れるので、NSDataからNSDictionaryを返すNSDictionaryクラスのカテゴリを最初に作成しました。あなたは今インポートした場合
#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)
:
NSDictionaryの+ DictFromData.h:ここではカテゴリーの2つのファイルがありますUIDocumentサブクラスのこのカテゴリを使用すると、plistファイルを簡単にロードしてiCloudコンテナに保存できます。あなたUIDocumentのサブクラスにこれを追加のiCloudからあなたの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;
}
バックのiCloudにあなたのデータを保存するため、これを追加します。
- (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を使ってチュートリアルを修正していますが、データを見るために2番目のデバイスを取得できません。 – zambono
。 +1 toポスター – autodidakto