2

我有一个应用程序,我使用第三方库来保存和加载数据。通常在使用 NSDocument 时,我已经覆盖了该- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError方法并返回了正确的数据,但是使用这个库我只能访问一个保存例程(它也可以创建多个文件,否则我会保存到一个临时文件并返回临时文件)。

我还尝试了以下方法:

- (void)saveToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation completionHandler:(void (^)(NSError *errorOrNil))completionHandler
{
   librarySaveFunction(url.path);
}

哪个有效,但文档标题保持为“我的文件 - 已编辑”,如果我再次尝试保存,我会收到一个错误,即文档已被另一个应用程序更新(我可以通过设置我的文件修改日期来解决这个问题,但该文件仍被标记为已编辑,感觉非常hackish)。

有没有人对覆盖保存程序的更好方法有更好的建议?

4

1 回答 1

3

NSDocument 有一个庞大的涉及读取和写入数据的方法层次结构。您应该覆盖哪一个在很大程度上取决于您的特定情况的细节以及它们与默认读/写机制的关系。当我看到这个问题时,我的直觉反应是你不想重写-save*方法,你想重写一个-write*方法(可能-writeToURL:ofType:forSaveOperation:originalContentsURL:error:),但是如果不了解更多关于你的应用程序的细节,真的很难说(还有这个您正在使用的第三方库。)

对各种覆盖点和它们适用的情况的最终讨论在这里

于 2013-09-25T12:55:23.037 回答