2014-04-25 4 views
26

i Fehler NSInvalidArgumentException bekam das ist meine ModellklasseNSInvalidArgumentException 'reas - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: Versuch Null-Objekt aus Objekte einfügen [4]'

+(NSArray *)users 
{ 
    NSDictionary *user1 = @{@"username" : @"master photographer", @"email" : @"[email protected]", @"password" : @"drowssap", @"age" : @24, @"profilePicture" : [UIImage imageNamed:@"person1.jpeg"]}; 
    NSDictionary *user2 = @{@"username" : @"Lots of tots", @"email" : @"[email protected]", @"password" : @"icecreamrocks", @"age" : @65, @"profilePicture" : [UIImage imageNamed:@"person2.jpeg"]}; 
    NSDictionary *user3 = @{@"username" : @"iTechie", @"email" : @"[email protected]", @"password" : @"infiniteloop", @"age" : @30, @"profilePicture" : [UIImage imageNamed:@"person3.jpeg"]}; 
    NSDictionary *user4 = @{@"username" : @"Royal", @"email" : @"[email protected]", @"password" : @"IGotAPalace", @"age" : @0, @"profilePicture" : [UIImage imageNamed:@"person4.jpeg"]}; 

    NSArray *userArray = @[user1, user2, user3, user4]; 
    return userArray; 
} 

@end 

und das ist mein viewDidLoad

+6

Ein (oder mehrere) Ihrer Bilder existieren nicht, was zu 'nil' führt. – rmaddy

+0

Ich denke, die Fehlermeldung sagt Ihnen, was los ist. * Alles in dieser Liste von Wörterbuchwerten, die möglicherweise "nil" ** sein könnten, ist ** "nil". Führen Sie ein Debugging durch und finden Sie es selbst. – trojanfoe

+1

Hast du eine Frage? – matt

Antwort

26

Der Fehler bedeutet, dass Sie versuchen, nil in das Wörterbuch zu stellen (was nicht erlaubt ist). Da Sie die Wörterbücher mit String-Literalen erstellen, können diese nicht nil sein. Dies bedeutet, dass das Problem bei einem oder mehreren Ihrer Bilder liegt.

Versuchen Sie, diese zu finden, das Problem zu helfen:

+(NSArray *)users 
{ 
    UIImage *image1 = [UIImage imageNamed:@"person1.jpeg"]; 
    UIImage *image2 = [UIImage imageNamed:@"person2.jpeg"]; 
    UIImage *image3 = [UIImage imageNamed:@"person3.jpeg"]; 
    UIImage *image4 = [UIImage imageNamed:@"person4.jpeg"]; 

    NSDictionary *user1 = @{@"username" : @"master photographer", @"email" : @"[email protected]", @"password" : @"drowssap", @"age" : @24, @"profilePicture" : image1 }; 
    NSDictionary *user2 = @{@"username" : @"Lots of tots", @"email" : @"[email protected]", @"password" : @"icecreamrocks", @"age" : @65, @"profilePicture" : image2 }; 
    NSDictionary *user3 = @{@"username" : @"iTechie", @"email" : @"[email protected]", @"password" : @"infiniteloop", @"age" : @30, @"profilePicture" : image3 }; 
    NSDictionary *user4 = @{@"username" : @"Royal", @"email" : @"[email protected]", @"password" : @"IGotAPalace", @"age" : @0, @"profilePicture" : image4 }; 

    NSArray *userArray = @[user1, user2, user3, user4]; 
    return userArray; 
} 

Jetzt können Sie entweder den Debugger verwenden und sehen, ob image1, image2, image3 oder image4 ist nil oder NSLog-Anweisungen für jede weitere.

Beachten Sie, dass bei Dateinamen die Groß-/Kleinschreibung beachtet wird. Stellen Sie daher sicher, dass der Name, den Sie an imageNamed: übergeben, exakt mit dem tatsächlichen Dateinamen übereinstimmt. Stellen Sie außerdem sicher, dass die Bilder die Erweiterung jpeg und nicht jpg haben. Stellen Sie sicher, dass die Bilder in Ihrem Ressourcenpaket verpackt sind.

+1

Auch erwähnenswert, dass, wenn ein Xcode Asset-Katalog verwendet wird, die Erweiterung weggelassen werden sollte. Da die Bilder jpeg sind, ist dies wahrscheinlich nicht der Fall, sollte aber dennoch erwähnt werden. –

1

Es bedeutet, dass einer der Werte, die Sie versuchen, in diesem Wörterbuch zu setzen, Null ist, höchstwahrscheinlich eines der Bilder. Sie könnten versuchen, die Bilder Variablen zuzuweisen und sie zu prüfen, um festzustellen, ob dies der Fall ist.

4

Einer der UIImages, die Sie erstellen möchten, sind null. Bitte fügen Sie den folgenden Code als erste Zeile der Methode + (NSArray *) Benutzer

NSAssert([UIImage imageNamed:@"person1.jpeg"] != nil, @"Person 1 image does not exist"); 
NSAssert([UIImage imageNamed:@"person2.jpeg"] != nil, @"Person 2 image does not exist"); 
NSAssert([UIImage imageNamed:@"person3.jpeg"] != nil, @"Person 3 image does not exist"); 
NSAssert([UIImage imageNamed:@"person4.jpeg"] != nil, @"Person 4 image does not exist"); 

Die von Code-Snippet wird auf Konsole drucken, was der Bilder nicht existiert. Lauf bitte auf DEBUG und lass uns sehen, was das Ergebnis der Behauptungen ist.

Hoffe, das hilft!

2

Die bessere Heilung wahrscheinlich ist es, die „NSDictionary“ so zu machen:

NSDictionary *user1 = [NSDictionary dictionaryWithObjectsAndKeys: my obj & key here, nil]; 
+0

Wie ist das ein besseres Heilmittel? –

+0

Ganz einfach, weil diese Methode: + (id) dictionaryWithObjectsAndKeys: (id) Firstobject, ... return eine Ausnahme für nil Schlüssel ... istead von: - (id) initWithDictionary: (NSDictionary *) Wörterbuch copyItems: (BOOL) flag (Ich denke, diese Methode wird für das Beispiel hier genannt) ..., die scheinbar nichts über Null-Schlüssel zurückgeben – Mike97

2

Versuch nil-Objekt aus Objekte einfügen [4]“ bedeutet, dass entweder der Schlüssel oder Wert bei Index [4] ist Null.

So wie die anderen gesagt haben, wäre es eines Ihrer Bilder, da der Schlüssel im Index [4] ein String-Literal ist.

Verwandte Themen