重启坞我使用下面的函数更新壁纸:重绘桌面背景,而不在OS X
- (void)updateWallpaper: (NSString *)path {
NSError * aerror;
NSURL *url = [[NSURL alloc] init];
url = [NSURL fileURLWithPath:path];
[[NSWorkspace sharedWorkspace] setDesktopImageURL:url forScreen:[NSScreen mainScreen] options:[NSDictionary dictionary] error:&aerror];
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary* desktopDict = [NSMutableDictionary dictionaryWithDictionary:[defaults persistentDomainForName:@"com.apple.desktop"]];
NSMutableDictionary* bgDict = [desktopDict objectForKey:@"Background"];
NSMutableDictionary* spaces = [bgDict objectForKey:@"spaces"];
[spaces enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSMutableDictionary* obj, BOOL *stop) {
[obj enumerateKeysAndObjectsUsingBlock:^(id key, NSMutableDictionary* prefs, BOOL *stop) {
[prefs setObject:path forKey:@"ImageFilePath"];
[prefs setObject:path forKey:@"NewImageFilePath"];
[prefs setObject:@"Never" forKey:@"Change"];
}];
}];
//NSLog(@"%@", desktopDict);
[defaults setPersistentDomain:desktopDict forName:@"com.apple.desktop"];
if ([defaults synchronize] == NO) {
NSLog(@"synchronize failed");
}
}
然而,更新并不总是呈现,在这个意义上,旧形象继续保持。我已经尝试了各种解决方法,我可以提出的最好方法是将图像写入每个更新的新文件(新文件路径)。这适用于我在桌面空间工作,但不适用于我在其他全屏应用程序空间中工作。修复此问题的唯一方法是重新加载码头(由system ("/usr/bin/killall Dock");
)。这不知何故重绘了之间的壁纸。但是这会导致所有应用程序的所有最小化窗口的最小化,这对我的使用来说并不合适。是否有其他方法来加强更新?
作为一个简单的解决方案,您可以使用AppleScript:'tell application“Finder” “将桌面图片设置为”“作为别名。请参阅[这个答案](http://stackoverflow.com/questions/4909702/run-applescript-from-cocoa-application)如何在您的应用程序中包含AppleScript。本文档中更详细的方法:https://developer.apple.com/library/mac/technotes/tn2084/_index.html –
Monolo
这让我觉得最好的方式就是向Apple提供一个bug,让他们修复它;这是他们的错误。 – bhaller
@Monolo做到了,没有帮助。同样的情况。 – arkanath