我将什么参数传递给NSUserDefaults.synchronize()?

时间:2015-09-20 22:33:06

标签: ios swift swift2

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

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

但是我一直遇到

的错误
NSUserDefaults.synchronize()

部分。错误状态“在调用中缺少参数#1的参数”我看过的所有地方似乎都使用该代码而没有错误。我知道最近会有/更新swift。此更新是否会导致使用同步功能更改某些内容,我该如何解决此问题?

1 个答案:

答案 0 :(得分:3)

synchronize实例方法,因此您应该在实例上调用它,而不是类:

NSUserDefaults.standardUserDefaults().synchronize()

但是,你不应该这样做。

CoreFoundation release notes for OS X 10.8中,有人说:

  

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

     

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

Foundation release notes for 10.9

  

- [NSUserDefaults synchronize]通常不常用

     

如果单独的应用程序将读取您刚刚设置的默认值,或者如果不使用AppKit的进程正在终止,则您只需要调用-synchronize。在大多数应用程序中,这些都不应该发生,并且不应该调用-synchronize。请注意,在Mac OS X 10.8.4之前,有一个错误导致AppKit在应用程序终止期间稍微过早地自动同步,因此在应用程序终止时响应窗口关闭而设置的首选项可能无法保存;这已得到修复。