当我在 TextEdit 中打开文本文档、退出它、重命名该文件并重新启动 TextEdit 时,重命名的文件将自动打开。如果文件移动到不同的文件夹,同样如此。
我从这个实验中得出的结论是,无论处理什么文档应该在 Mac OS X 上自动重新打开,都不使用文件路径,或者至少不只使用文件路径。
那么,除了文件路径之外,我可以向文档写入哪种类型的文件引用,即使在我的应用程序未运行时目标文件被重命名或移动,该文档也将保持有效?
我对此很感兴趣,因为我正在开发一个应用程序,该应用程序可能需要在其自己的文档中存储对其他文件的引用。
最佳答案
您正在寻找基于 NSURL
的解决方案。您可以创建一个书签,即使文件被移动/重命名,该书签也会引用该文件。
借用FileWatcher on GitHub by Peter Sugihara :
- (NSData *)bookmarkFromURL:(NSURL *)url {
NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationPreferFileIDResolution
includingResourceValuesForKeys:NULL
relativeToURL:NULL
error:NULL];
return bookmark;
}
- (NSURL *)urlFromBookmark:(NSData *)bookmark {
NSError *error = noErr;
NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark
options:NSURLBookmarkResolutionWithoutUI
relativeToURL:NULL
bookmarkDataIsStale:NULL
error:&error];
if (error != noErr)
NSLog(@"%@", [error description]);
return url;
}
您可以安全地保留返回的书签数据,并且在您的应用重新启动后它将指向同一文件。
官方文档中的附加信息:Locating Files Using Bookmarks
编辑:根据 Peter Hosey 与上述代码中的错误处理相关的非常有效的建议,请注意:来自 FileWatcher 的上述代码不按照标准处理错误,并附加到服务作为指导方针。
具体请引用官方文档。
关于macos - 除了路径之外,Mac OS X 上还有哪些其他类型的持久文件引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14912625/