NSInvalidArgumentException所需类型= NSString;给定type = __NSDictionaryM;不可接受的价值类型:财产

时间:2016-07-04 10:55:00

标签: ios core-data nsnull

我在这里使用NSManagedObject设置一些值。

我得到的第一个问题当我尝试将null值赋给属性时它会给出错误:

desired type = NSString;

给定type = null。

我从JSON文件中序列化NSDictionary获取值。但是当值为null时,我会得到崩溃上面的错误:

desired type = NSString;

给定type = null。

为此,我正在编写以下代码但仍然得到错误。我该怎么做才能正确处理空值。

    NSManagedObject *updateDevice=[results lastObject];

           if([results count] > 0){
                        //if(1){
              NSLog(@"updateeeee");
                        //continue;
   [updateDevice setValue:[NSString stringWithFormat:@"%@",[dict objectForKey:@"clip_image_path"]] forKey:@"clip_image_path"];
   [updateDevice setValue:[dict objectForKey:@"clip_name"] forKey:@"clip_name"];
   [updateDevice setValue:[dict objectForKey:@"page_categorisation"] forKey:@"page_categorisation"];

以下属性具有空值

  [updateDevice setValue:[dict objectForKey:@"personality_company_master_values"] == [NSNull null] ? nil:dict    forKey:@"personality_company_master_values"];

  [updateDevice setValue:[dict objectForKey:@"category_master_values"] == [NSNull null] ? nil: dict forKey:@"category_master_values"];

  [updateDevice setValue:[dict objectForKey:@"brand_master_values"] == [NSNull null] ? nil:dict forKey:@"brand_master_values"];

  [updateDevice setValue:[dict objectForKey:@"company_master_values"] == [NSNull null] ? nil:dict forKey:@"company_master_values"];

  [updateDevice setValue:[dict objectForKey:@"product_master_values"] == [NSNull null] ? nil:dict forKey:@"product_master_values"];

  [updateDevice setValue:[dict objectForKey:@"industry_master_values"] == [NSNull null] ? nil:dict forKey:@"industry_master_values"];

3 个答案:

答案 0 :(得分:1)

您收到问题标题中引用的错误,因为此行:

[updateDevice setValue:[dict objectForKey:@"personality_company_master_values"] == [NSNull null] ? nil:dict    forKey:@"personality_company_master_values"];
如果条件失败,

正在将dict传递给setValue:。尝试替换为:

[updateDevice setValue:[dict objectForKey:@"personality_company_master_values"] == [NSNull null] ? nil: [dict objectForKey:@"personality_company_master_values"] forKey:@"personality_company_master_values"];

即。传递字典的相关元素,而不是字典本身。

答案 1 :(得分:0)

您的代码中存在一些错误。首先,最好使用isEqual:方法而不是==NSNull进行比较:

[[dict objectForKey:@"personality_company_master_values"] isEqual:[NSNull null]]

另一个问题是您如何使用?:运算符。如果设置括号,它将如下所示:

[updateDevice setValue:([dict objectForKey:@"personality_company_master_values"] == [NSNull null] ? nil:dict) forKey:@"personality_company_master_values"];

您确定dict不是nil吗?或许你错过了]

答案 2 :(得分:0)

plz在设置值

之前使用此代码
 if ([updateDevice valueForKey:@"personality_company_master_values"] && ![[updateDevice valueForKey:@"personality_company_master_values"] isKindOfClass:[NSNull class]])
 [updateDevice setValue:[dict objectForKey:@"personality_company_master_values"]    forKey:@"personality_company_master_values"];