我正在使用NSKeyedArchiver & NSKeyedUnarchiver在Core-Data存储一些复杂的数据,稍后在我的应用程序中检索它。 直到现在,这个工作完美无缺,但在迁移之后, Swift 3.0似乎并不满意我的代码。 我早在我的代码中: var firstArray = [Int](), secondArray = [CGFloat]() ……. // stores some values in firstArray and also in secondArray. ……. 这里是如何存储数据的代码如下所示: let masterArray = [firstArray, secondArray] as [Any] let dataForApp:NSData = NSKeyedArchiver.archivedData(withRootObject: masterArray) as NSData entityFieldsDico = ["dataForAppArray":dataForApp] // Use entityFieldsDico to save dataForApp in Core-Data under the key […]
我只是重命名我的Xcode项目,当我跑了它,我得到这个错误: 2015-11-14 05:32:42.337 Buck Tracker [3537:1456100] *因未捕获的exception'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'* – [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(iBudgeter.Record)for键(NS.objects); 该类可以在源代码或未链接的库中定义“ Buck Tracker是新名称, iBudgeter是原始名称。 Record是我创build的一个自定义NSObject来存储一些数据。 我试图重命名项目回到iBudgeter但它没有工作。 在git中恢复到以前的版本确实有帮助,但是当我重新命名时,我得到了同样的错误。 那么有什么build议?
我试图通过序列化数组传递一个“员工”对象iPhone数组到苹果手表: NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:employees]; 并将其反序列化为Watch: NSMutableArray *employees = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; 这是'员工'级别: @interface Employee : NSManagedObject @property (nonatomic, retain) NSNumber * employeeID; @property (nonatomic, retain) NSString * name; @property (nonatomic, retain) NSNumber * age; @property (nonatomic, retain) NSString * address; @property (nonatomic, retain) NSString * designation; @property (nonatomic, retain) NSString * teamName; @property (nonatomic, […]
如果原始类未知, NSKeyedUnarchiver.decodeObject将导致崩溃/ SIGABRT 。 我所看到的解决这个问题的唯一解决scheme来自Swift的早期历史,并且需要使用Objective C(也是Swift 2之前的guard , throws , try和catch )。 我可以弄清Objective-C的路线 – 但是如果可能的话,我宁愿理解一个Swift-only解决scheme。 例如 – 数据已经使用NSPropertyListFormat.XMLFormat_v1_0编码。 如果编码数据的类是未知的,下面的代码将在unarchiver.decodeObject()失败。 //… let dat = NSData(contentsOfURL: url)! let unarchiver = NSKeyedUnarchiver(forReadingWithData: dat) //it will crash after this if the class in the xml file is not known if let newListCollection = (unarchiver.decodeObject()) as? List { return newListCollection […]