私は、単一のドキュメントをユビキタス コンテナーを介して iOS の同等のアプリとの間で同期する OS X アプリを持っています。iOS アプリは、Mac 側で変更されるたびにデータを受信し、iOS 側で変更されるたびにデータを送信します (したがって、iOS アプリはすべての場所で動作しています)。Mac アプリは、Mac 側で変更されるたびにデータを送信します。アプリの起動時にデータを受け取りますが、実行中にデータを再度チェックしているようには見えません。OS Xの「メモ」アプリがiOS側の変更から行うように、変更があれば自動的かつすぐに更新したいと思います。
起動時に呼び出される関連関数は次のとおりです。
+(NSMutableDictionary *)getAllNotes {
if(allNotes == nil) {
allNotes = [[NSMutableDictionary alloc]initWithDictionary:[[NSUserDefaults standardUserDefaults] dictionaryForKey:kAllNotes]];
cloudDoc = [[CloudDocument alloc]initWithContentsOfURL:[self notesURL] ofType:NSPlainTextDocumentType error:nil];
[cloudDoc saveToURL:[self notesURL] ofType:NSPlainTextDocumentType forSaveOperation:NSSaveOperation error:nil];
}
return allNotes;
}
その「CloudDocument」クラス (のサブクラスNSDocument
) には以下が含まれます。
#import "Data.h"
@implementation CloudDocument
-(NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
return [NSKeyedArchiver archivedDataWithRootObject:[Data getAllNotes]];
}
-(BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
NSDictionary *dict = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)data];
[Data didReceiveCloudData:dict];
return YES;
}
+(BOOL)autosavesInPlace {
return YES;
}
@end
それをキックバックします:
+(void)didReceiveCloudData:(NSDictionary *)d {
allNotes = [[NSMutableDictionary alloc]initWithDictionary:d];
[[NSUserDefaults standardUserDefaults] setObject:allNotes forKey:kAllNotes];
[cloudDoc updateChangeCount:NSChangeDone];
}
問題は、「ユビキタス コンテナーが変更されたかどうかを定期的に確認してから実行する...」などのフレーズに相当するコードの部分がないことだと思います。これについてはよく知られたプロセス (NSDocument
または何らかの通知イベント) がありますが、私が見つけたものはすべて、OS X/NSDocuments ではなく iOS/UIDocuments のいずれかであるか、またはそれはすべて理論であり、具体的なコードがなくても私の頭の上にあります。梳かしてバラバラにするサンプル。
ユビキタス コンテナ内の iCloud ドキュメントが変更されたことを登録する方法と、理想的にはそれを配置する場所 (AppDelegate、CloudDocument.m など) を手伝ってくれる人はいますか? 定数 で示される 1 つのファイルしか同期してkAllNotes
いないので、さまざまなファイルなどを追跡する必要はありません。起動時に実行されるコードを使用して、実行する必要があることを実行できると確信していますが、自動同期プロセスを開始するために何をすべきかわかりません。
前もって感謝します!
PS 私はまだ初心者なので、チュートリアルとコード サンプルは大歓迎です。