ios - 如何存档和取消存档 NSObject?

标签 ios objective-c game-center nsobject nskeyedarchiver

我正在尝试存档我在游戏中心回合制游戏中通过比赛数据发送的 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:这是我的 init with coder 和 encode with coder

 - (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/

相关文章:

ios - GKTurnBasedEventHandler 委托(delegate)未收到任何消息

ios - 尝试将变量从一个类移动到另一个类

ios - 使用标签创建 UIImageView。 swift 3

ios - indexPathForRow(在 : location) always [0, 0]

ios - dispatch_async 和 peformSelectorInBackground 的区别

iphone - 关于 GKAchievement 中的完成百分比

ios - 如何在屏幕上为 UITabBar 设置动画并识别它通常所在的位置?

ios - AVAudioPlayer 在电话的音箱上播放音乐时播放音频

ios - 在 UIView beginAnimations 完成后做一个 Action

iphone - 多个设备上的 Game Center 沙箱