NSInvalidArgumentException',reas - [__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象中插入nil对象[4]'

时间:2014-04-25 16:39:08

标签: ios objective-c null

我收到错误NSInvalidArgumentException这是我的模型类

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

这是我的viewdidload

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

5 个答案:

答案 0 :(得分:27)

错误意味着您试图将nil放入字典中(不允许)。由于您使用字符串文字构建字典,因此不能nil。这意味着您的一个或多个图像存在问题。

尝试此操作以帮助您找到问题:

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

现在您可以使用调试器,看看image1image2image3image4nil还是添加NSLog每个人的陈述。

请记住,文件名区分大小写,因此请确保传递给imageNamed:的名称与实际文件名完全匹配。同时验证图片的扩展名为jpeg,而不是jpg。确保图像正在资源包中打包。

答案 1 :(得分:5)

你想要创造的其中一个UIImages是零。 请添加以下代码作为方法的第一行+(NSArray *)用户

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

该代码片段将在控制台上打印出哪些图像不存在。 请在DEBUG上运行,让我们看看断言的结果是什么。

希望这有帮助!

答案 2 :(得分:2)

更好的治疗可能是制作" NSDictionary"像这样:

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

答案 3 :(得分:2)

" 尝试从对象中插入nil对象[4] "表示索引[4]中的键或值为零。

因为其他人已经说过这将是你的一个图像,因为索引[4]的键是一个字符串文字。

答案 4 :(得分:1)

这意味着您尝试放入该字典中的一个值为零,很可能是其中一个图片。您可以尝试将图像分配给变量并检查它们以查看是否是这种情况。