Подтвердить что ты не робот

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);
4b9b3361

Ответ 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

Это означает, что одно из значений, которые вы пытаетесь поместить в этот словарь, - это нуль, скорее всего, одно из изображений. Вы можете попытаться присвоить изображения переменным и проверить их, чтобы убедиться, что это так.