保存到一个文件中引用它在Objective-C移动之后?(Keep a reference to a

2019-07-19 05:02发布

我有一个Cocoa应用程序存储在用户的计算机上的多媒体文件(图片,视频等)的参考。 我不知道是否有一种方式来获得到其他,使用文件路径,这样,如果用户移动该文件到他们的计算机上不同的文件夹,我仍然知道它是文件的引用。 我目前存储正在从标准可可公开对话传回文件路径数组:

-(void)addMultimediaDidEnd:(NSOpenPanel*)sheet
           returnCode:(int)returnCode
          contextInfo:(NSString *)contextInfo 
{   
    if(returnCode == NSOKButton) {
        [sheet orderOut:nil];
        [self saveFiles:[sheet filenames]];
    }
}

Answer 1:

在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,碳时代的界面到OS X文件别名系统可用。 上有别名管理器的顶部一对夫妇的Objective-C封装的,使用户使用它从可可更好。 我最喜欢的是狼Rentzsch的补充,克里斯·汉森的BDAlias (可在github上 )。



Answer 2:

下面是使用书签跨移动跟踪文件的一个简单的例子:

- (NSData *)bookmarkFromURL:(NSURL *)url {
    NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationMinimalBookmark
                     includingResourceValuesForKeys:NULL
                                      relativeToURL:NULL
                                              error:NULL];
    return bookmark;
}

- (NSURL *)urlFromBookmark:(NSData *)bookmark {
    NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark
                                           options:NSURLBookmarkResolutionWithoutUI
                                     relativeToURL:NULL
                               bookmarkDataIsStale:NO
                                             error:NULL];
    return url;
}

从https://github.com/ptrsghr/FileWatcher/blob/master/FileWatcherExample/Classes/FileWatcher.m



文章来源: Keep a reference to a file after it has moved in objective-c?