我传入NSUserDefaults.synchronize()的参数是什么?

我试图在我的精灵游戏中保存高分。 根据我看过的所有教程和我读过的堆栈溢出答案,下面的代码应该可以工作:

NSUserDefaults.standardUserDefaults().setInteger(highScore, forKey: "highScore") NSUserDefaults.synchronize() 

但是我不断遇到一个错误

 NSUserDefaults.synchronize() 

部分错误状态“参数#1在调用中缺less参数”我所看过的所有地方似乎使用该代码没有错误。 我知道最近会有一个快速更新。 这个更新是否会导致同步function发生变化,我该如何解决这个问题?

您需要在standardUserDefaults上调用synchronize

 NSUserDefaults.standardUserDefaults().synchronize(); 

请记住,不需要调用synchronize

synchronize是一个实例方法 ,所以你应该调用它在一个实例,而不是类:

 NSUserDefaults.standardUserDefaults().synchronize() 

但是,你不应该这样做。

在OS X 10.8的CoreFoundation发行说明中指出:

CFPreferences同步CFPreferencesSynchronize() (因此CFPreferencesAppSynchronize()-[NSUserDefaults synchronize] )现在几乎在所有情况下都是自动的。 剩下的唯一原因就是如果你需要一个单独的进程来同步访问刚才设置的值, 例如,如果您设置了首选项,则发布另一个进程接收到的通知并读取相同的首选项。 大多数常规应用程序永远不需要这样做,并鼓励那些应用程序使用进程间通信API(例如XPC)与其他进程通信,而不是使用IPC的首选项系统。

CFPreferencesSynchronize()在10.8中也快得多,如果没有未完成的读写改变,将避免做任何工作。

基金会发布的10.9的注释 :

– [NSUserDefaults同步]通常不是有用的

如果一个单独的应用程序将读取您刚刚设置的默认值,或者如果不使用AppKit的进程正在终止,则只需要调用-synchronize 。 在大多数应用程序中都不应该发生这种情况,并且不应该调用-synchronize 。 请注意,在Mac OS X 10.8.4之前,有一个错误导致AppKit在应用程序终止时过早自动同步,所以在应用程序终止时响应于closures窗口而设置的首选项可能不会被保存; 这已被修复。