我正在与NSDefaults合作并试图在finder中读取finder收藏夹列表。此代码在命令行实用程序中返回该列表:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSUserDefaults *userDefaults = [[NSUserDefaults alloc] init];
[userDefaults addSuiteNamed:@"com.apple.sidebarlists"];
NSDictionary *list = [userDefaults dictionaryForKey:@"favoriteitems"];
NSLog(@"%@", list);
}
return 0;
}
不幸的是,返回的列表似乎是陈旧的。
例如,如果我通过finder从finder收藏夹列表中删除一个条目,然后重新运行我的一点代码,则删除的条目仍然在列表中。在系统将UserDefaults缓存与磁盘同步之前,这似乎是正确的(例如,我可以通过重新启动计算机来强制执行此操作)。
有没有办法强制cocoa读取首选项缓存而不是磁盘,因为它似乎在做什么?
答案 0 :(得分:3)
不要这样做。有一个支持的API,虽然它只在标题中记录。请参阅/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LSSharedFileList.h中的LSSharedFileList API。您可能希望列表中包含标识符kLSSharedFileListFavoriteItems
。
答案 1 :(得分:0)
您可以强制使用synchronize方法进行同步。这是否能解决您的问题我不知道。