NSUserDefaults没有从首选项缓存中获取首选项值?

时间:2014-07-20 17:44:52

标签: objective-c cocoa xcode5

我正在与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读取首选项缓存而不是磁盘,因为它似乎在做什么?

2 个答案:

答案 0 :(得分:3)

不要这样做。有一个支持的API,虽然它只在标题中记录。请参阅/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LSSharedFileList.h中的LSSharedFileList API。您可能希望列表中包含标识符kLSSharedFileListFavoriteItems

答案 1 :(得分:0)

您可以强制使用synchronize方法进行同步。这是否能解决您的问题我不知道。