除了路径,Mac OS X上的其他类型的持久文件引用是什么?

时间:2013-02-16 16:45:19

标签: macos cocoa file

当我在TextEdit中打开文本文档时,退出它,重命名文件并重新启动TextEdit,重命名的文件将自动打开。如果将文件移动到其他文件夹,情况也是如此。

我从这个实验中得出结论,无论处理哪些文档应该在Mac OS X上自动重新打开,都不使用文件路径,或者至少不使用文件路径。

因此,除了文件路径之外,即使在我的应用未运行时重命名或移动目标文件,我可以写入哪种文件引用仍然有效?

我对此感兴趣,因为我正在开发一个可能需要在其自己的文档中存储对其他文件的引用的应用程序。

1 个答案:

答案 0 :(得分:3)

您正在寻找基于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的上述代码不会根据标准处理错误,并附加到服务器上作为指导。

有关详细信息,请参阅官方文档。