2015-09-20 3 views
1

Я пытаюсь сохранить высокий балл в моей игре spritekit. На основе всех учебников я наблюдал и переполнение стека ответов я читал, следующий код должен работать:Какой параметр я могу передать в NSUserDefaults.synchronize()?

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

однако я постоянно сталкиваясь ошибку с

NSUserDefaults.synchronize() 

portion.The error states «Отсутствует аргумент для параметра №1 в вызове». Все места, которые я видел, похоже, используют этот код без ошибок. Я знаю, что будет/недавно обновление для быстрой. Было ли это обновление причиной того, что что-то изменилось с помощью функции синхронизации, как я могу это исправить?

ответ

4

Необходимо позвонить по телефону synchronize по телефону standardUserDefaults.

NSUserDefaults.standardUserDefaults().synchronize(); 

Имейте в виду, что нет необходимости вызывать synchronize.

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, если отдельное приложение будет читать по умолчанию, что вы просто set, или если процесс, который не использует AppKit, завершается. В большинстве случаев ни одно из них никогда не должно происходить, и -synchronize не следует вызывать. Обратите внимание, что до Mac OS X 10.8.4 произошла ошибка, которая заставила AppKit автоматически синхронизировать несколько преждевременно во время завершения приложения, поэтому предпочтения, установленные в ответ на закрытие окон при завершении приложения, могут не быть сохранены; это было исправлено.

Смежные вопросы