/ / objectForKeyクラッシュ? iOS - iOS、クラッシュ、Sigabrt

objectForKeyがクラッシュしましたか? iOS - iOS、クラッシュ、Sigabrt

次のコードを使用してロードしようとしていますクリックされたUISegmentedControlの現在のセグメントに基づいた情報を持つUIButtonとUITextFieldが、SIGABRTクラッシュを引き起こしています。 これがコードです:

- (void)updateInfo {

NSLog(@"count1:%d", [self.accounts count]);

[self saveInfo];

NSLog(@"count2:%d", [self.accounts count]);

NSDictionary *dict = [self.accounts objectAtIndex:0];
NSData *imageData = [dict objectForKey:@"ProfileImage"];
UIImage *imageProfile = [UIImage imageWithData:imageData];
[image1 setImage:imageProfile];

NSDictionary *dict2 = [self.accounts objectAtIndex:1];
NSData *imageData2 = [dict2 objectForKey:@"ProfileImage"];
UIImage *imageProfile2 = [UIImage imageWithData:imageData2];
[image2 setImage:imageProfile2];

if ([self.accounts objectAtIndex:accountSC.selectedSegmentIndex] != nil) {
NSDictionary *dict = [self.accounts objectAtIndex:accountSC.selectedSegmentIndex];
//NSString *name = [dict objectForKey:@"Name"];
NSString *name = [accountSC titleForSegmentAtIndex:accountSC.selectedSegmentIndex];
[Name setText:name];
NSData *imageData = [dict objectForKey:@"ProfileImage"];
UIImage *imageProfile = [UIImage imageWithData:imageData];
[pictureButton setImage:imageProfile forState:UIControlStateNormal];
}
else {
Name.text = nil;
[pictureButton setImage:nil forState:UIControlStateNormal];
}

}

最初と2番目の大きなコードブロックは一時的なものです。UIImageが異なるobjectAtIndex番号に基づいているのを見たかったからです。

これはコンソールクラッシュログです:

*** Terminating app due to uncaught exception "NSInvalidArgumentException", reason: "-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x2cc08"

これが起こり得る理由は何ですか?使用している他のコードを投稿する必要がありますか?

私は本当にこれの助けを必要としています、私は私の髪を引き抜いています!

編集1: 私はこのコードを使用しています、またあなたはisKindOfClassについて話していましたね。 とにかくこれはコードです:

NSDictionary *dict = [self.accounts objectAtIndex:1];
if ([dict isKindOfClass:[NSDictionary class]]) {
NSLog(@"YES");
}
else {
NSLog(@"NO");
}

イムテスト中...

回答:

回答№1の場合は3

あなたが「送ります」 objectForKey: 〜に NSString オブジェクト、特にコードのどこかに直接入力したもの @"..." プログラムで作成したもの(またはプログラムで作成したもの)ではなく、フォームを使用してください。辞書以外のものを self.accounts.


回答№2の場合は1

NSDictionary: objectForKey:

objectForKey: keyに関連付けられた値を返します。keyに関連付けられた値がない場合はnilを返します。

key :値を識別する文字列nilの場合、単にnilを返します。

(1)鍵が空白ではないことを知っておくべきです

(2)NSDictionaryでは異なる種類の型を使用しないでください。そのため、オブジェクトは空白ではなく、オブジェクトは同じ型です。

例えば {@"key1":NSString,@"key2":NSNumber} //これはエラーのデモです