来自 nsmanagedObject 的 NSJSONSerialization 表示键不符合键值编码

Posted

技术标签:

【中文标题】来自 nsmanagedObject 的 NSJSONSerialization 表示键不符合键值编码【英文标题】:NSJSONSerialization from an nsmanagedObject says a key is not key value coding-compliant 【发布时间】:2013-12-13 09:14:34 【问题描述】:

我正在尝试将我的NSManagedObject 作为Serialized object 发送回我的网络服务。 我就是这样做的。

    NSDictionary *menuDictionary = [self dictionaryFromMenu:appointment];

        NSError *err;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:menuDictionary options:NSJSONWritingPrettyPrinted error:&err];

        NSString *jsonString = [[NSString alloc] initWithData:jsonData
                                                     encoding:NSUTF8StringEncoding];


- (NSDictionary *)dictionaryFromMenu:(Appointment*)appointment 
   NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[appointment.app_id description],@"Id",
     appointment.app_addressinfo, @"AddressInfo",
     appointment.app_completed, @"Completed",
     appointment.app_description, @"Description",
     appointment.app_end, @"EndDate",
     appointment.app_fullday, @"FullDay",
     appointment.app_label, @"Label",
     appointment.app_label_id, @"LabelId",
     appointment.app_location, @"Location",
     appointment.app_private, @"Private",
     appointment.app_project_name, @"ProjectName",
     appointment.app_project_number, @"ProjectNumber",
     appointment.app_relation_address_city, @"RelationAddressCity",
     appointment.app_relation_address_id, @"RelationAddressId",
     appointment.app_relation_address_name, @"RelationAddressName",
     appointment.app_relation_address_street, @"RelationAddressStreet",
     appointment.app_relation_code, @"RelationCode",
     appointment.app_relation_contact_id, @"RelationContactPersonId",
     appointment.app_relation_contact_name, @"RelationContactPersonName",
     appointment.app_relation_name, @"RelationName",
     appointment.app_reminder_info, @"ReminderInfo",
     appointment.app_start, @"StartDate",
     appointment.app_state, @"State",
     appointment.app_subject, @"Subject",
     appointment.app_supplier_code, @"SupplierCode",
     appointment.app_supplier_contact_person_id, @"SupplierContactPersonId",
     appointment.app_supplier_contact_person_name, @"SupplierContactPersonName",
     appointment.app_supplier_name, @"SupplierName",
     appointment.app_type, @"Type",
     nil];
    return dict;

这就是我的entity 的样子。

现在我收到此错误:

 *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Appointment 0x16dcb520> valueForUndefinedKey:]: the entity Appointment is not key value coding-compliant for the key "SupplierName".'

有什么帮助吗?

【问题讨论】:

您最近是否添加了此属性或其他什么?也许你在数据库中有一些旧的数据格式没有那个属性。 1) 尝试从设备或模拟器中删除应用程序并重新启动应用程序。 2)也许这对你有帮助***.com/questions/12651860/… 出现错误时你在做什么? NSLog 创建字典后,仔细检查它是否符合您的预期。 你是否设置了异常断点来找出错误到底发生在哪里? 【参考方案1】:

所以 SupplierName 的值为 nil。这会导致您的字典的构建过早停止。如果您使用了新的 @语法,您会遇到运行时错误。

您需要更改您的代码,因此对于每个键,如果值为 nil,则改用 [NSNull null]。

【讨论】:

以上是关于来自 nsmanagedObject 的 NSJSONSerialization 表示键不符合键值编码的主要内容,如果未能解决你的问题,请参考以下文章

使用 RESTkit 从 JSON 映射来自 NSManagedObject 的 NSString 数组

Xcode 4:替换 NSManagedObject 子类

子类 NSManagedObject 以轻松初始化

ID:[...] 的 NSManagedObject 已失效

核心数据 - NSManagedObject 返回 nil

NSManagedObject 子类在 swift 中初始化失败