web-dev-qa-db-fra.com

NSInvalidArgumentException ', reas - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: tentative d'insertion d'objet nul à partir d'objets [4]'

j'ai une erreur NSInvalidArgumentException c'est ma classe de modèle

+(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

et ceci est mon viewdidload

self.users = [DMZUserData users];
NSLog(@"%@", self.users);
27
zramled

L'erreur signifie que vous essayez de mettre nil dans le dictionnaire (ce qui n'est pas autorisé). Puisque vous construisez les dictionnaires avec des littéraux de chaîne, ceux-ci ne peuvent pas être nil. Cela signifie que le problème concerne une ou plusieurs de vos images.

Essayez ceci pour trouver le problème:

+(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;
}

Vous pouvez maintenant utiliser le débogueur et voir si image1, image2, image3, ou image4 est nil ou ajoutez des instructions NSLog pour chacune.

Gardez à l'esprit que les noms de fichiers sont sensibles à la casse, alors assurez-vous que le nom que vous passez à imageNamed: correspond exactement au vrai nom de fichier. Vérifiez également que les images ont l'extension jpeg et non jpg. Assurez-vous que les images sont emballées dans votre ensemble de ressources.

27
rmaddy

L'un des UIImages que vous essayez de créer est nul. Veuillez ajouter le code suivant comme première ligne de la méthode + (NSArray *) utilisateurs

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

Cet extrait de code imprimera sur la console ce que les images n'existent pas. Exécutez s'il vous plaît sur DEBUG et voyons quel est le résultat des assertions.

J'espère que cela t'aides!

5
Barbara R

" tentative d'insertion d'un objet nul à partir d'objets [4] " signifie que la clé ou la valeur à l'index [4] est néant.

Donc, comme les autres l'ont dit, ce serait l'une de vos images puisque la clé à l'index [4] est une chaîne littérale.

2
SuperGuyAbe

Le meilleur remède est probablement de faire le "NSDictionary" comme ceci:

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

Cela signifie que l'une des valeurs que vous essayez de mettre dans ce dictionnaire est nulle, probablement l'une des images. Vous pouvez essayer d'affecter les images à des variables et de les inspecter pour voir si c'est le cas.

1
Chuck