我有一个应用程序,我使用第三方库来保存和加载数据。通常在使用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);
}这是可行的,但是文档标题仍然是'MyFile - Edited',如果我再次尝试保存,我会得到一个错误,即文档已经被另一个应用程序更新了(我能够通过设置文件修改日期来解决这个问题,但是文件仍然被标记为Edited,而且感觉非常不舒服)。
有没有人有更好的建议,以更好的方式来覆盖保存例程?
发布于 2013-09-25 12:55:23
NSDocument在读取和写入数据方面有一个庞大的层次结构。应该覆盖哪一个在很大程度上取决于特定情况的具体情况以及它们与默认的读/写机制的关系。当我看到这个问题时,我的直觉反应是,你不想覆盖-save*方法,你想要覆盖一个-write*方法(可能是-writeToURL:ofType:forSaveOperation:originalContentsURL:error:),但是如果不知道你的应用程序的更多细节(以及你正在使用的第三方库),就很难说了。
对各种覆盖点和适合它们的情况的最终讨论是这里。
https://stackoverflow.com/questions/19004211
复制相似问题