NSInvalidArgumentException ', reas - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нулевой объект из объектов [4]'
я получил ошибку NSInvalidArgumentException это мой класс модели
+(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
и это моя viewdidload
self.users = [DMZUserData users];
NSLog(@"%@", self.users);
Ответы
Ответ 1
Ошибка означает, что вы пытаетесь поместить 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" : @"[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;
}
Теперь вы можете использовать отладчик и посмотреть, есть ли image1
, image2
, image3
или image4
nil
или добавить инструкции NSLog
для каждого.
Имейте в виду, что имена файлов чувствительны к регистру, поэтому убедитесь, что имя, которое вы передаете в imageNamed:
, точно соответствует истинному имени файла. Также проверьте, что изображения имеют расширение jpeg
, а не jpg
. Убедитесь, что изображения упакованы в ваш ресурсный пакет.
Ответ 2
Один из 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 и посмотрите, каков результат утверждений.
Надеюсь, это поможет!
Ответ 3
Лучшее лечение, вероятно, должно сделать "NSDictionary" следующим образом:
NSDictionary *user1 = [NSDictionary dictionaryWithObjectsAndKeys: my obj & key here, nil];
Ответ 4
" попытка вставить нулевой объект из объектов [4]" означает, что либо ключ, либо значение в индексе [4] равен нулю.
Так как другие сказали, что это будет одно из ваших изображений, так как ключ в индексе [4] является строковым литералом.
Ответ 5
Это означает, что одно из значений, которые вы пытаетесь поместить в этот словарь, - это нуль, скорее всего, одно из изображений. Вы можете попытаться присвоить изображения переменным и проверить их, чтобы убедиться, что это так.