【发布时间】:2012-01-27 15:47:29
【问题描述】:
我正在尝试解决如何同步我的 Mac 沙盒应用程序的“应用程序支持”文件夹中的 .plist 文件。我知道我可以使用 iCloud 键值存储,但每个应用程序有 64KB 的限制,这可能会或可能不会达到,具体取决于用户添加到应用程序的数量!
我已经尽可能多地阅读了 Apple 文档,但我仍然很困惑 :(
有人做过类似的事情吗?
谢谢
【问题讨论】:
标签: objective-c xcode macos cocoa icloud
我正在尝试解决如何同步我的 Mac 沙盒应用程序的“应用程序支持”文件夹中的 .plist 文件。我知道我可以使用 iCloud 键值存储,但每个应用程序有 64KB 的限制,这可能会或可能不会达到,具体取决于用户添加到应用程序的数量!
我已经尽可能多地阅读了 Apple 文档,但我仍然很困惑 :(
有人做过类似的事情吗?
谢谢
【问题讨论】:
标签: objective-c xcode macos cocoa icloud
您应该创建一个 UIDocument 的子类并将其与普遍存在的目录一起使用。
有两种方法负责处理读/写。阅读时调用这个:
- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError
还有这个写的时候:
- (id)contentsForType:(NSString *)typeName error:(NSError **)outError
所有打开/保存操作都会自动调用,您无需执行任何操作。但是,有一些方法可以强制打开/保存。打开时调用这个:
- (void)openWithCompletionHandler:(void (^)(BOOL success))completionHandler
/* --- EXAMPLE --- */
MyDocument *doc = [[MyDocument alloc] initWithFileURL:ubiquitousFileURL];
[doc openWithCompletionHandler:^(BOOL success) {
if (success) {
// do sth
} else {
// handle error
}
}];
...保存时会这样:
- (void)saveToURL:(NSURL *)url forSaveOperation:(UIDocumentSaveOperation)saveOperation completionHandler:(void (^)(BOOL success))completionHandler
/* --- EXAMPLE --- */
MyDocument *doc = [[MyDocument alloc] initWithFileURL:ubiquitousPackage];
[doc saveToURL:[doc fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
if (success) {
// do sth
} else {
// handle error
}
}];
网上有很多教程,这里有一些我用来学习的例子:
UIDocument Class Reference 也可能有帮助。
【讨论】:
NSDocument来做这个,我想...看看developer.apple.com/library/mac/#documentation/Cocoa/Reference/…