当我在TextEdit中打开一个文本文档,退出它,重命名文件并重新启动TextEdit时,重命名的文件将自动打开。如果将文件移动到不同的文件夹,情况也是如此。
我从这个实验中得出结论,无论是处理什么文档,都应该在Mac OS X上自动重新打开,而不使用文件路径,或者至少不只使用文件路径。
那么,除了文件路径之外,我可以向文档写入什么样的文件引用,即使在我的应用程序未运行时重命名或移动了目标文件,这些文件引用也将保持有效?
我对此感兴趣,因为我正在开发一个应用程序,该应用程序可能需要在自己的文档中存储对其他文件的引用。
您正在寻找基于NSURL
的解决方案。您可以创建一个书签,即使在文件被移动/重命名后,该书签也会引用该文件。
从GitHub上的FileWatcher借用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;
}
你可以安全地保存返回的书签数据,并且在你的应用程序重新启动后,它会指向同一个文件。
官方文档中的附加信息:使用书签定位文件
编辑:根据Peter Hosey关于上述代码中错误处理的非常有效的建议,请注意:FileWatcher的上述代码未根据标准处理错误,并作为指南附上。
有关详细信息,请参阅官方文件。