无法解密类Employee的对象(NS.object.0); 该类可以在源代码中定义,也可以在未链接的库中定义

use*_*878 12 objective-c nskeyedarchiver ios nskeyedunarchiver watchkit

我试图通过序列化数组将一系列'Employee'对象iPhone传递给Apple Watch:

NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:employees];
Run Code Online (Sandbox Code Playgroud)

并在Watch侧进行反序列化:

NSMutableArray *employees = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
Run Code Online (Sandbox Code Playgroud)

这是'员工'类:

@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, retain) NSString * gender;
@property (nonatomic, retain) NSNumber * dateOfJoining;
@end
Run Code Online (Sandbox Code Playgroud)

我是否必须在Watch端进行任何更改才能修复此错误?

ter*_*ina 36

所以我只是遇到了同样的问题,答案很简单,但有点难以自己找到.

你只需要使用:

  • NSKeyedArchiver.setClassName("Employee", for: Employee.self)
    在序列化之前
  • NSKeyedUnarchiver.setClass(Employee.self, forClassName: "Employee")
    在反序列化之前

在需要的地方.

看起来iOS扩展名在类名前面加上扩展名.


Ste*_*n S 10

对我来说,这发生在我的Today扩展中。解决该问题的方法是在声明之前添加@objc(MyExampleClass)

@objc(MyExampleClass)
open class MyExampleClass {
....
}
Run Code Online (Sandbox Code Playgroud)