web-dev-qa-db-ja.com

NSInvalidArgumentException '、reas-[__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:オブジェクト[4]'からnilオブジェクトを挿入しようとしています

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);
27
zramled

エラーは、nilを辞書に入れようとしていることを意味します(許可されていません)。文字列リテラルを使用して辞書を構築しているため、nilにはできません。これは、問題が1つ以上の画像にあることを意味します。

これを試して問題を見つけてください:

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

デバッガを使用して、image1image2image3、またはimage4nilであるか、NSLogステートメントを追加するかを確認できます。それぞれ。

ファイル名では大文字と小文字が区別されるため、imageNamed:に渡す名前が実際のファイル名と正確に一致するようにしてください。また、イメージの拡張子がjpegではなくjpgであることを確認します。イメージがリソースバンドルにパッケージ化されていることを確認してください。

27
rmaddy

作成しようとしているUIImageの1つがnilです。メソッドの最初の行として次のコードを追加してください+(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");

そのコードスニペットは、存在しない画像をコンソールに出力します。 DEBUGで実行して、アサーションの結果が何であるかを見てみましょう。

お役に立てれば!

5
Barbara R

objects [4]からnilオブジェクトを挿入しようとしています」は、キーまたは値がインデックス[4]はnilです。

他の人が言ったように、インデックス[4]のキーは文字列リテラルであるため、画像の1つになります。

2
SuperGuyAbe

より良い治療法は、おそらく次のように「NSDictionary」を作成することです。

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

これは、その辞書に入れようとしている値の1つがnilであり、おそらく写真の1つであることを意味します。画像を変数に割り当てて、それらが正しいかどうかを確認してみてください。

1
Chuck