2015-09-13 3 views
0

Я тестирую этот код на детской площадке. Я не понимаю, почему результат всегда равен нулю? Спасибо за помощьПочему NSUserDefaults всегда возвращает нуль?

var value: String! 
let key = "key24" 

if value == nil{ 
    value = "hehe" 
    let valueNS = NSString(string: value) 


    NSUserDefaults.standardUserDefaults().setValue(valueNS, forKey: key) 
} 



var result: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey(key) 
print(result) 

enter image description here

+0

Я просто проверял свой код в игровой площадке, он отлично работает, и выход говорит, что значение результата «хе-хе» не ноль. –

+0

это серьезно странно. проверьте скриншот – brumbrum

+0

Не используйте 'setValue: forKey:'. Используйте 'setObject: forKey:'. – rmaddy

ответ

2

Там что-то поддатый происходит с игровыми площадками, особенно с Xcode 7. Я могу получить вариацию код для работы на Xcode 6.4, с некоторыми изменениями:

Вы должны использовать setObject:forKey не setValue:forKey.

Вы должны синхронизировать синхронизацию после изменения значений по умолчанию.

Вот измененный код (который работает в Xcode 6.4, хотя тестирование его в Xcode затем вызывает Xcode 6.4 на провал, а также.)

//: Playground - noun: a place where people can play 

import UIKit 

var value: String! 
let key = "key24" 


if value == nil 
{ 
    value = "hehe" 
    print("value was nil!") 
    NSUserDefaults.standardUserDefaults().setObject(value, forKey: key) 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

var result = NSUserDefaults.standardUserDefaults().stringForKey(key) 
print(result) 
+1

Вызов 'synchronize()' также не нужен и рекомендуется Apple. Никогда не нужно звонить в обычном режиме. Проверьте документы Фонда для нескольких экземпляров, в которых это действительно необходимо. –

+1

И все же, когда я протестировал его, вызов stringForKey вернулся без него и вернул значение правильно, когда я его добавил. –

+0

Я собираюсь пойти с «основной истиной» того, что работает. –

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