ios - NSKeyedArchiver 在没有调用 -finishEncoding 的情况下被释放

标签 ios core-data nskeyedarchiver

在核心数据中,我设置了一个名为 GolferEntity 的简单实体,它仅包含一个 GolferObject(可转换类型)和playerId(字符串)。

- (void)addOrUpdateGolfer:(GolferObject *)feedObj
{   
    NSLog(@"In add or update Feed");

// get reference to local (stored) golfer item, create it if needed
Golfer *localGolfer = [self golferForId:[feedObj PlayerId]];
if (localGolfer == nil) {
    localGolfer = (Golfer *)[NSEntityDescription insertNewObjectForEntityForName:@"GolferEntity" inManagedObjectContext:[self managedObjectContext]];
    [localGolfer setPlayerId:[feedObj PlayerId]];
}

// set folder fields
[localGolfer setGolferObj:feedObj];

// apply update
NSError *error;
if (![managedObjectContext save:&error]) {
    NSLog(@"%@", [error localizedDescription]);
    //      return nil;
}
NSLog(@"successfully saved user: %@", [feedObj PlayerId]);
//return localFolder;
}

代码给了我一个运行时错误,内容如下: * -[NSKeyedArchiver dealloc]:警告:NSKeyedArchiver 在没有调用 -finishEncoding 的情况下被释放。 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[GolferObjectencodeWithCoder:]:无法识别的选择器发送到实例 0x4b7520”

-- 我的代码中没有分配 NSKeyedArchiver,所以我假设这是由核心数据完成的事情?我的 GolferObject 也没有encodeWithCoder 方法?我不知道这是从哪里来的?

最佳答案

在提交到 CoreData 中的自定义对象之前,我需要进行编码。我需要使用 - (void)encodeWithCoder:(NSCoder *)encoder;和 - (id)initWithCoder:(NSCoder *)解码器;方法。

关于ios - NSKeyedArchiver 在没有调用 -finishEncoding 的情况下被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433524/

相关文章:

ios - 核心数据和SQLite理想使用方案

swift - 遵守 Codable 会像遵守 NSCoding 那样免费为我提供 Core Data 值(value)转换吗?

swift - 使用 Codable 序列化包含引用循环的自定义类

ios - 如何在 uitableviewcell 中设置 uicollectionview 的高度?

ios - CocoaPods 更新正在降级已安装的 pod

ios - 如何根据 Xcode 中的文件夹结构排列我的项目文件

database - 如何打开核心数据数据库?

swift - NSKeyedUnarchiver.unarchiveObject() 取消归档旧对象

objective-c - iOS 12.0 替代使用已弃用的 archiveRootObject :toFile:

ios - 如何以编程方式将运行脚本构建阶段添加到 Xcode 项目?