2016-01-16 3 views
0

Я создал собственный класс под названием test. Я сделал переменную под названием «игра» равной тесту. Я попытался сохранить «игру» в NSUserDefaults и попытался напечатать значения из «игры». После запуска проекта у меня возникла ошибка: «Thread 1: signal SIGABRT». Как сохранить мой пользовательский объект в NSUserDefaults без получения этой ошибки?Как сохранить пользовательский класс в swift для NSUserDefaults?

Вот мой класс:

class Test { 
    var boolean = false 
    var int = 1 
    var arr = ["one": 1] 
} 

Вот моя экономия код:

let defaults = NSUserDefaults.standardUserDefaults() 

    let game = Test() 

    game.arr = ["two": 3] 
    game.hi = true 
    game.int = 100 

    defaults.setObject(game, forKey: "SG") 

    let gameSet = defaults.objectForKey("SG")! as! Test 

    print(gameSet.int) 
    print(gameSet.boolean) 
    print(gameSet.arr["one"]) 

Это все в методе viewDidLoad. Исключая тестовый класс.

+0

Вам необходимо сделать свой класс совместимым с NSCoding и использовать NSKeyedArchiver для преобразования в NSData перед сохранением в NSUserDefaults или для сохранения его в файл plist –

+0

@ leo-dabus, и что делать, если я не хочу использовать NSObject в качестве суперкласса ? –

+1

http://stackoverflow.com/a/33194374/2303865 –

ответ

0

From the documentation:

The value parameter can be only property list objects: NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary.

Вы хотите посмотреть на использование NSKeyedArchiver вместо пользовательских объектов.

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