NSInvalidArgumentException 所需的类型 = NSString;给定类型 = __NSDictionaryM;不可接受的值类型:属性
NSInvalidArgumentException desired type = NSString; given type = __NSDictionaryM; Unacceptable type of value : property
这里我使用 NSManagedObject
设置了一些值。
我遇到的第一个问题是,当我尝试将空值分配给 属性 时出现错误:
desired type = NSString;
给定类型 =null。
我正在从 JSON 文件序列化的 NSDictionary
中获取值。但是当值为 null 时,我得到了上面错误的崩溃:
desired type = NSString;
给定类型 =null。
为此,我正在编写以下代码,但我仍然得到 error.What 我应该如何正确处理空值。
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"];
您的代码中有一些错误。首先,最好使用 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
吗?或者您可能错过了 ]
?
请在设置值之前使用此代码
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"];
您收到问题标题中引用的错误,因为这一行:
[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"];
即。传递字典的相关元素,而不是字典本身。
这里我使用 NSManagedObject
设置了一些值。
我遇到的第一个问题是,当我尝试将空值分配给 属性 时出现错误:
desired type = NSString;
给定类型 =null。
我正在从 JSON 文件序列化的 NSDictionary
中获取值。但是当值为 null 时,我得到了上面错误的崩溃:
desired type = NSString;
给定类型 =null。
为此,我正在编写以下代码,但我仍然得到 error.What 我应该如何正确处理空值。
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"];
您的代码中有一些错误。首先,最好使用 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
吗?或者您可能错过了 ]
?
请在设置值之前使用此代码
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"];
您收到问题标题中引用的错误,因为这一行:
[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"];
即。传递字典的相关元素,而不是字典本身。