我正在尝试创建一个书签,即使在文件被移动或重命名后也能找到它。在这里,我创建并存储一个书签~/Desktop/file.txt
:
- (void) writeBookmark {
NSURL* urlToBookmark = [NSURL fileURLWithPath:[@"~/Desktop/file.txt" stringByExpandingTildeInPath]] ;
NSData* bookmarkData = [urlToBookmark bookmarkDataWithOptions:NSURLBookmarkCreationPreferFileIDResolution includingResourceValuesForKeys:nil relativeToURL:nil error:nil ] ;
[[NSUserDefaults standardUserDefaults] setObject:bookmarkData forKey:@"bookmarkData"] ;
[[NSUserDefaults standardUserDefaults] synchronize] ;
}
在这里我阅读了存储的书签:
- (void) readBookmark {
NSData* bookmarkData = [[NSUserDefaults standardUserDefaults] objectForKey:@"bookmarkData"] ;
NSURL* urlFromBookmark = [NSURL URLByResolvingBookmarkData:bookmarkData options:0 relativeToURL:nil bookmarkDataIsStale:nil error:nil] ;
NSLog(@"%@", [urlFromBookmark.path stringByAbbreviatingWithTildeInPath]) ;
}
我连续运行,它按预期工作,writeBookmark
记录。readBookmark
~/Desktop/file.txt
然后我将 file.txt 从 移动~/Desktop
到~/Music
,然后运行readBookmark
. 它按预期工作,记录~/Music/file.txt
。
最后,我创建了一个新文件~/Desktop/file.txt
并运行readBookmark
. ~/Music/file.txt
它没有按预期记录,而是记录了~/Desktop/file.txt
. 不应该NSURLBookmarkCreationPreferFileIDResolution
导致 NSURL 始终指向创建它的原始文件,而不管原始文件的路径中是否存在不同的文件?
我正在为 OS X 10.8 开发,而不是沙盒。