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);
エラーは、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;
}
デバッガを使用して、image1
、image2
、image3
、またはimage4
がnil
であるか、NSLog
ステートメントを追加するかを確認できます。それぞれ。
ファイル名では大文字と小文字が区別されるため、imageNamed:
に渡す名前が実際のファイル名と正確に一致するようにしてください。また、イメージの拡張子がjpeg
ではなくjpg
であることを確認します。イメージがリソースバンドルにパッケージ化されていることを確認してください。
作成しようとしている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で実行して、アサーションの結果が何であるかを見てみましょう。
お役に立てれば!
「objects [4]からnilオブジェクトを挿入しようとしています」は、キーまたは値がインデックス[4]はnilです。
他の人が言ったように、インデックス[4]のキーは文字列リテラルであるため、画像の1つになります。
より良い治療法は、おそらく次のように「NSDictionary」を作成することです。
NSDictionary *user1 = [NSDictionary dictionaryWithObjectsAndKeys: my obj & key here, nil];
これは、その辞書に入れようとしている値の1つがnilであり、おそらく写真の1つであることを意味します。画像を変数に割り当てて、それらが正しいかどうかを確認してみてください。