Когда объект архива в коде func encode (с aCoder: NSCoder) разбился с быстрым перечислением в реальном режиме

В моем классе singleton меня есть swift перечисление здесь:

 import UIKit enum UserType { case terant // case normalUser // case normalUserFinancialer // } @objc(UserStaticSwift) class UserStaticSwift:NSObject, NSCoding { 

Сообщенная error :

Ошибка

С помощью журнала console :

Нульзальд Брель Нумайль Нульвальдль Джонсовойль Ну ужльльбо Нужен Филиппиль Нумайль Нульбари Нуль Нульваль Джонль Нульвиар Нуль Нульвио Нужен Филиппильз Нуль Нужмайкль

В encode :

 func encode(with aCoder: NSCoder) { /* 基础 */ aCoder.encode(islogin, forKey: "islogin") aCoder.encode(type!, forKey: "type") // crash here in real device aCoder.encode(forOcType, forKey: "forOcType") aCoder.encode(username, forKey: "username") aCoder.encode(password, forKey: "password") aCoder.encode(userId, forKey: "userId") 

code здесь я архивирую userStatic :

  userStatic.addUserInfo(type: userStatic.type!, dic: userInfoDic, closure: { (void) in // success then archive `userStatic` let paths:NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray let path = paths.firstObject let homePath = "\(path)/\(Global.archive_userStaticData)" let _ = NSKeyedArchiver.archiveRootObject(userStatic, toFile: homePath) }) 

Моя debug когда archiveRootObject :

Консоль

Журнал console :

 (lldb) po NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray error: Couldn't materialize: couldn't get the value of void: extracting data from value failed error: errored out in DoExecute, couldn't PrepareToExecuteJITExpression (lldb) po homePath error: Couldn't materialize: couldn't get the value of void: extracting data from value failed error: errored out in DoExecute, couldn't PrepareToExecuteJITExpression 

Я тестировал в simulator и device , в simulator проблема не существует, в реальном device проблема выходит.

Попробуйте это для вашего вопроса

 func encode(with aCoder: NSCoder) { aCoder.encode(type.rawValue, forKey: "type") } 

Чтобы получить больше информации

Позвольте подробно обсудить эту проблему

Например, это мой Enum:

 enum PieceType : Int { case empty case notEmpty } 

И это мой объект, который является дочерним элементом NSObject

 class Piece: NSObject, NSCoding { var islogin: Bool var type: PieceType var username: String! var password: String! override init() { islogin = false type = PieceType.empty username = "" password = "" } required init(coder aDecoder: NSCoder) { islogin = aDecoder.decodeBool(forKey: "islogin") type = PieceType(rawValue: aDecoder.decodeObject(forKey: "type") as! Int)! username = aDecoder.decodeObject(forKey: "username") as! String password = aDecoder.decodeObject(forKey: "password") as! String } func encode(with aCoder: NSCoder) { aCoder.encode(islogin, forKey: "islogin") aCoder.encode(type.rawValue, forKey: "type") aCoder.encode(username, forKey: "username") aCoder.encode(password, forKey: "password") } } 

Когда вы вызываете NSKeyedArchiver.archiveRootObject(::) он вызовет метод func encode(with aCoder: NSCoder) и преобразует NSObject в Data. При попытке разархивировать ваш объект он вызовет метод init(coder aDecoder: NSCoder) и преобразует данные в NSObject с помощью ключа.

Но в случае Enum вы не можете кодировать enum напрямую B'Coz, это тип данных User Define, но rawValue должен быть встроенным типом данных, например Int, String, Float ….. Итак. поэтому, когда вы пытаетесь закодировать enum вам нужно использовать rawValue

Надеюсь, вы поймете.

  • Переопределение ячеек CollectionView iOS 11
  • странная быстрая ошибка после обновления с 1,1 до 1,2
  • Swift: асинхронный обратный вызов
  • Граница UITextField для нижней стороны только в быстрой
  • Как добавить заголовки в dataTaskWithUrl?
  • View Controller не загружает просмотр раскадровки
  • Автоматическое отключение программ не работает
  • Восстановить внешний вид навигационной панели по умолчанию
  • Swift - Гомоку в iOS
  • CMDeviceMotion возвращает 0 значений для магнитного поля
  • iOS - отправить изображение в Instagram - DocumentInteraction
  • Interesting Posts
    Давайте будем гением компьютера.