2016-07-14 1 views
1

При сохранении значений в NSUserDefaults:Как предотвратить сообщение журнала «пропуск настройки уже текущее значение для ключевых»

[[NSUserDefaults standardUserDefaults] setValue:myValue forKey:@"myKey"]; 

... если значение уже существующих, Xcode 8 зарегистрирует:

2016-07-14 09: 59: 04.081806 MyAppName [52232: 2561291] [Пользовательские настройки] CFPrefsPlistSource < 0x7941d950> (Домен: com.myAppBundle, Пользователь: kCFPreferencesCurrentUser, ByHost: Нет, Контейнер: (null)), текущая стоимость для ключа myKey

1) Могу ли я попросить Xcode не регистрировать это? [главный вопрос]

2) Или я должен сравнивать равенство ранее сохраненных значений перед использованием setValue:forKey:? [дочерняя вопрос]

Пример:

if (![[NSUserDefaults standardUserDefaults] valueForKey:@"myKey"] isEqual:myValue]) 
    [NSUserDefaults standardUserDefaults] setValue:myValue forKey:@"myKey"]; 

3) Или я должен выполнить это сравнение с поточно-замком, чтобы избежать хранения в два раза и то же значение между инструкцией, где я сравниваю и инструкции где Я использую setValue:forKey:? [дочерняя вопрос]

Пример:

@synchronized ([NSUserDefaults standardUserDefaults]) { 
    if (![[NSUserDefaults standardUserDefaults] valueForKey:@"myKey"] isEqual:myValue]) 
     [NSUserDefaults standardUserDefaults] setValue:myValue forKey:@"myKey"]; 
} 

ответ

0

Проблема была с бета-1 и бета-2 только. Зафиксировано с Xcode 8 бета 3:

При отладке приложений в Simulator, ОС не будет производить чрезмерное количество бесполезных каротажа. (26652255)

Кроме того, более каротаж может быть удален путем редактирования каждой схемы и добавляя определенные переменные среды, OS_ACTIVITY_MODE к disable: OS_ACTIVITY_MODE disable

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