我有一个 Cocoa 应用程序,它在用户的计算机上存储对多媒体文件(图像、视频等)的引用。我想知道是否有其他方法可以使用文件路径获取对该文件的引用,这样如果用户将该文件移动到他们计算机上的其他文件夹,我仍然会知道它在哪里。我目前正在存储从标准 Cocoa 打开对话框传回的文件路径数组:
-(void)addMultimediaDidEnd:(NSOpenPanel*)sheet
returnCode:(int)returnCode
contextInfo:(NSString *)contextInfo
{
if(returnCode == NSOKButton) {
[sheet orderOut:nil];
[self saveFiles:[sheet filenames]];
}
}
最佳答案
在 OS X 10.6 (Snow Leopard) 中,NSURL
可以转换为文件引用 URL(使用 -[NSURL fileReferenceURL]
),它在移动中引用文件当您的应用程序正在运行时。如果要保留此文件引用,请使用 +[NSURL writeBookmarkData:toURL:options:error:]
传递由 -[NSURL bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error]< 生成的书签数据
。稍后可以通过 +[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:]
传递从 +[NSURL bookmarkDataWithContentsOfURL:error:]
返回的书签数据来解析书签。
在 OS X 10.6 之前,可以通过 AliasManager(一个 Carbon 时代的 OS X 文件别名系统接口(interface))获得相同的功能(减去一些网络感知的细节)。在 Alias Manager 之上有几个 Objective-C 包装器,可以更好地从 Cocoa 中使用它。我最喜欢的是 Wolf Rentzsch 对 Chris Hanson 的 BDAlias
的补充(在 github 上可用)。
关于objective-c - 在 objective-c 中移动后保留对文件的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468394/