在mac上读一个plist

时间:2011-02-02 02:16:37

标签: cocoa macos plist

我正在尝试通过阅读plist来设置图像。我正在开发一个使用当前桌面壁纸的应用程序并将其设置为Windows背景图像。文件位于~/Library/Preferences/com.apple.desktop.plist 我如何从中读取密钥?我正在尝试阅读的具体键是;

NewImageFilePath
ImageFilePath

我尝试过这段代码,就像在iPhone上阅读一个plist但它没有用。

NSString *plistPath = @"~/Library/Preferences/com.apple.desktop.plist";
NSDictionary *plistData = [[NSDictionary dictionaryWithContentsOfFile:plistPath] retain];
NSString *item = [plistData objectForKey:@"NewImageFilePath"];

NSLog([NSString stringWithFormat:@"%@", item]);

一旦我可以获得位于plists字符串中的实际数据,我的计划是将其设置为NSImageView或[window setBackgroundColor:[color]];方法

提前致谢。

4 个答案:

答案 0 :(得分:2)

请注意,桌面图像的某些信息可以通过公共APIS获得,从10.6开始。阅读NSWorkspace文档,特别是-[NSWorkspace desktopImageOptionsForScreen:]等文档。

答案 1 :(得分:1)

根据我本地用户帐户的plist,以下内容适合您:

NSString *plistPath = @"~/Library/Preferences/com.apple.desktop.plist";
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:plistPath];
NSString *item = [[[plistData objectForKey:@"Background"] objectForKey:@"default"] objectForKey:@"NewImageFilePath"];

更容易理解的解决方案是使用valueForKeyPath:

NSString *plistPath = @"~/Library/Preferences/com.apple.desktop.plist";
NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:plistPath];
NSString *item = [plistData valueForKeyPath:@"Background.default.NewImageFilePath"];

答案 2 :(得分:0)

plist看起来像这样吗?

<dict>
    <key>NewImageFilePath</key>
    <string>...</string>
</dict>

如果是这样,该代码应该有效。但我猜测键不在第一个词典的根源?

答案 3 :(得分:0)

我现在一切正常,除了现在显示图像。使用

NSURL *address = [[NSWorkspace sharedWorkspace] desktopImageURLForScreen:[NSScreen mainScreen]];

我能够获得图像的地址。我现在正在尝试设置windows backgroundColor这个图像。谢谢你的帮助。