我正在尝试使用以下代码来加载UIButton和UITextField,其中包含基于UISegmentedControl的当前段的信息,该段被单击但导致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];
}
}
第一个&第二大代码块是临时的,因为我想根据不同的objectAtIndex数字看到UIImage。
以下是控制台崩溃日志:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x2cc08'
为什么会发生这种情况?我是否需要发布我正在使用的任何其他代码?
我真的需要帮助,我一直在拔头发!
EDIT1: 我正在使用这段代码,你还在谈论isKindOfClass吧? 无论如何这是代码:
NSDictionary *dict = [self.accounts objectAtIndex:1];
if ([dict isKindOfClass:[NSDictionary class]]) {
NSLog(@"YES");
}
else {
NSLog(@"NO");
}
我现在正在测试...
答案 0 :(得分:3)
您将objectForKey:
发送到NSString
对象,特别是您以@"..."
形式直接在代码中输入的对象,而不是您以编程方式创建的对象(或已经以编程方式为您创建了)。有人在self.accounts
中添加字典以外的其他内容。
答案 1 :(得分:0)
NSDictionary:objectForKey:
objectForKey:
返回与key关联的值,如果没有值与key关联,则返回nil。
key
:标识值的字符串。如果为零,则返回nil。
(1)你应该知道密钥不是空白
(2)您应该知道对象不是空白且对象类型相同,因为您不应该在NSDictionary中使用不同类型的类型。
e.g。 {@"key1":NSString,@"key2":NSArray}
//这是错误的演示