我正在尝试存档我通过基于比赛中心回合的游戏中的比赛数据发送的NSObject。

以下是我用于存档对象的代码

turnDataObject MyData = [[turnDataObject alloc] init];

data = [NSKeyedArchiver archivedDataWithRootObject:MyData];


这是我用于取消归档对象的代码

readMyData = [NSKeyedUnarchiver unarchiveObjectWithData:data] ;


但是,当我运行此代码时,出现错误

 thread 1 exc bad access code


我认为这可能与我存档数据时发送地址有关。取消归档后,如何发送可读取的内容?

编辑1:取消存档后,在下一行出现错误。它表示我尝试访问的地址为空。我记得在某处读过我没有发送过NSObject的地址,但是我不确定如何将其转换为其他内容。

readMyData = [NSKeyedUnarchiver unarchiveObjectWithData:data] ;

NSLog(@"current game happens to be: %@", readMyData.currentGame);


编辑2:这是我与编码器的初始化,并与编码器一起编码

 - (instancetype)initWithCoder:(NSCoder *)decoder
 {
     self = [self init];
     if (self) {

         _currentGame = [decoder decodeObjectForKey:currentGameDataKey];

    }
    return self;
 }

 - (void)encodeWithCoder:(NSCoder *)encoder
 {

    //scores data keys
    [encoder encodeObject:self.currentGame forKey:currentGameDataKey];

 }


编辑3:_currentGame在我的对象.h文件中

 @property (assign, nonatomic) NSString *currentGame;

最佳答案

我建议创建NSKeyedArchiver和NSKeyedUnarchiver对象,并使用它们而不是使用类型(看起来像在做)。

我通常使用Swift进行编程,但以下是示例代码:

theArchiver NSKeyedArchiver = [[theArchiver alloc] init];
data = [theArchiver archivedDataWithRootObject:MyData];


然后,您将使用NSKeyedUnarchiver执行相同的操作。

关于ios - 如何归档和取消归档NSObject?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32145238/

10-10 14:21