2016-07-04 4 views
2

Hier stelle ich einige Werte unter Verwendung des NSManagedObject ein.NSInvalidArgumentException gewünschter Typ = NSString; gegebener Typ = __NSS DictionaryM; Inakzeptabler Werttyp: Eigenschaft

erste Problem, das ich habe, dass, wenn ich versuche, den Nullwert der Eigenschaft zuweisen es Fehler geben:

desired type = NSString;

gegeben type = null.

Ich bekomme Werte von NSDictionary serialisiert aus einer JSON-Datei. Aber wenn der Wert null ist erhalte ich den Absturz über Fehler geben:

desired type = NSString;

gegeben type = null.

Dafür schreibe ich den folgenden Code, aber ich bekomme immer noch den Fehler.Was soll ich tun, um Nullwert richtig zu behandeln.

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

folgende Eigenschaften haben die Nullwerte

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

Keine Hilfe bis jetzt – vicky

Antwort

1

Sie erhalten den Fehler in Ihrer Frage Titel zitiert, weil dieser Zeile:

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

dict zum setValue: ist vorbei, wenn die Bedingung fehlschlägt . Ersetzen Sie es mit:

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

dh. übergeben Sie das relevante Element des Wörterbuchs, nicht das Wörterbuch selbst.

0

Sie einige Fehler in Ihrem Code haben. Zunächst einmal ist es besser, isEqual: Methode zu verwenden, eher == dann mit NSNull zu vergleichen:

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

Eine weitere Frage ist, wie Sie ?: Operator verwenden. Wenn Klammern gesetzt wird es wie folgt aussieht:

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

Sind Sie sicher, dict nicht nil ist? Oder vielleicht hast du ] verpasst?

+0

Ich habe die Klammern gesetzt, aber es gibt mir den gleichen Fehler. Werte hier einstellen [updateDevice setValue: [dict objectForKey: @ "Clip_Name"] forKey: @ "Clip_Name"]; Das ist richtig, aber für Nullwerte bekomme ich keine Hacke, um danach zu suchen. schlagen Sie mir einen anderen Weg vor, um nach dem Nullwert zu suchen. @Mikhail – vicky

+0

@vicky überprüfen Sie meine Antwort –

0

plz dieser Code vor gesetzt, um den Wert

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

nein, es ist nicht richtig Wert für personality_company_master_values ​​ist es gibt Null, aber es hat einen gewissen Wert für einige Clips @balkaran singh – vicky

+0

es Checks personality_company_master_values ​​hat Wert und personality_company_master_values ​​ist nicht Null-Klasse. Wenn personal_company_master_values ​​Wert haben, wird der Wert gesetzt. –

+0

dann, warum es nicht den Wert setzt ich verwende den Code, den Sie vorgeschlagen [email protected] Singh – vicky

Verwandte Themen