Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

i got error NSInvalidArgumentException this is my model class

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

and this is my viewdidload

self.users = [DMZUserData users];
NSLog(@"%@", self.users);
like image 550
zramled Avatar asked Apr 25 '14 16:04

zramled


4 Answers

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" : @"[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;
}

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.

like image 103
rmaddy Avatar answered Nov 17 '22 04:11

rmaddy


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!

like image 25
Barbara R Avatar answered Nov 17 '22 04:11

Barbara R


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

NSDictionary *user1 = [NSDictionary dictionaryWithObjectsAndKeys: my obj & key here, nil];
like image 2
Mike97 Avatar answered Nov 17 '22 03:11

Mike97


"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.

like image 2
SuperGuyAbe Avatar answered Nov 17 '22 04:11

SuperGuyAbe