NSInvalidArgumentException', reas-[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[4]'

StackOverflow https://stackoverflow.com/questions/23298615

  •  09-07-2023
  •  | 
  •  

Domanda

i got error NSInvalidArgumentException this is my model class

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

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

@end

and this is my viewdidload

self.users = [DMZUserData users];
NSLog(@"%@", self.users);
È stato utile?

Soluzione

The error means you are trying to put nil in the dictionary (which is not allowed). Since you are building the dictionaries with string literals those can't be nil. This means the problem is with one or more of your images.

Try this to help find the problem:

+(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" : @"worldtravel@me.com", @"password" : @"drowssap", @"age" : @24, @"profilePicture" : image1 };
    NSDictionary *user2 = @{@"username" : @"Lots of tots", @"email" : @"otterskips@me.com", @"password" : @"icecreamrocks", @"age" : @65, @"profilePicture" : image2 };
    NSDictionary *user3 = @{@"username" : @"iTechie", @"email" : @"theRealApple@me.com", @"password" : @"infiniteloop", @"age" : @30, @"profilePicture" : image3 };
    NSDictionary *user4 = @{@"username" : @"Royal", @"email" : @"king@me.com", @"password" : @"IGotAPalace", @"age" : @0, @"profilePicture" : image4 };

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

Now you can either use the debugger and see if image1, image2, image3, or image4 is nil or add NSLog statements for each.

Keep in mind that filenames are case sensitive so be sure the name you pass to imageNamed: exactly matches the real filename. Also verify the images have the extension jpeg and not jpg. Make sure the images are being packaged in your resource bundle.

Altri suggerimenti

One of the UIImages you're trying to create are nil. Please add the following code as the first line of the method +(NSArray *)users

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

That snippet of code will print on console what of the images does not exist. Run please on DEBUG and let's see what the result of the assertions is.

Hope this helps!

The better cure probably is to make the "NSDictionary" like this:

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

"attempt to insert nil object from objects[4]" means that either the key or value at index [4] is nil.

So as the others have said it would be one of your images since the key at index [4] is a string literal.

It means that one of the values you're trying to put in that dictionary is nil, most likely one of the pictures. You might try assigning the images to variables and inspecting them to see if this is the case.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top