当我在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的上述代码未根据标准处理错误,并作为准则进行了附加。
有关详细信息,请参阅官方文档。