NSInvalidArgumentException требуемый тип = NSString; данный тип = NSDictionaryM; недопустимый тип значения: свойство


Здесь я устанавливаю некоторые значения, используя NSManagedObject.

Первая проблема, которую я получил, когда я пытаюсь присвоить нулевое значение свойству, это дает ошибку:

desired type = NSString;

Данный тип =null.

Я получаю значения из NSDictionary сериализованного файла JSON. Но когда значение равно null, я получаю сбой, дающий выше ошибку:

desired type = NSString;

Данный тип =null.

Для этого я пишу следующий код, но все равно получаю ошибку.Что я должен делать? сделать, чтобы правильно обрабатывать значения 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 2

3 ответа:

Вы получаете ошибку, указанную в заголовке вашего вопроса, потому что эта строка:

[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"];

Т. е. передайте соответствующий элемент словаря, а не сам словарь.

У вас есть некоторые ошибки в коде. Прежде всего, лучше использовать метод 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? Или, может быть, вы пропустили ]?

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"];