【发布时间】:2014-07-30 01:54:21
【问题描述】:
我有一个 OSX 应用程序,它应该包含用户磁盘中任何位置的文件列表。
应用的第一个版本将这些文件的路径保存在核心数据模型中。
但是,如果文件被移动或重命名,该工具将失去作用,应用程序可能会崩溃。
所以我决定使用书签。它似乎正在工作,但每次我尝试恢复数据时,我都会得到文件的旧路径。这是为什么?我错过了什么?
我的核心数据实体使用二进制数据字段来保存书签。
书签本身是这样完成的:
NSData * bookmark = [filePath bookmarkDataWithOptions:NSURLBookmarkCreationMinimalBookmark
includingResourceValuesForKeys:NULL
relativeToURL:NULL
error:NULL];
在加载应用程序时,我有一个循环来迭代所有表并恢复书签,如下所示:
while (object = [rowEnumerator nextObject]) {
NSError * error = noErr;
NSURL * bookmark = [NSURL URLByResolvingBookmarkData:[object fileBookmark]
options:NSURLBookmarkResolutionWithoutUI
relativeToURL:NULL
bookmarkDataIsStale:NO
error:&error];
if (error != noErr)
DDLogCError(@"%@", [error description]);
DDLogCInfo(@"File Path: %@", [bookmark fileReferenceURL]);
}
如果我重命名文件,则路径为空。我认为存储此 NSData 对象和带有路径的字符串之间没有区别。所以我显然错过了一些东西。
编辑:
我也经常收到这样的错误:CFURLSetTemporaryResourcePropertyForKey failed because it was passed this URL which has no scheme。
感谢您的帮助,谢谢!
【问题讨论】:
标签: objective-c macos cocoa core-data path