сбой objectForKey? IOS - PullRequest
       1

сбой objectForKey? IOS

0 голосов
/ 25 июля 2011

Я пытаюсь использовать следующий код для загрузки 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];
}

}

Первый и второй большие блоки кода являются временными, потому что я хотел видеть UIImage, основанный на разных числах objectAtIndex.

Вот журнал сбоя консоли:

*** 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");
}

Сейчас я тестирую ...

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Вы отправляете objectForKey: объекту NSString, в частности объекту, который вы ввели прямо в код где-то в форме @"...", а не объекту, который вы создали программно (или создали программно для вас) , Кто-то помещает что-то кроме словаря в self.accounts.

0 голосов
/ 18 января 2018

NSDictionary: objectForKey:

objectForKey: возвращает значение, связанное с ключом, или ноль, если значение не связано с ключом.

key: строка, идентифицирующая значение.Если nil, просто верните nil.

(1) вы должны знать, что ключ не пуст

(2) вы должны знать, что объект не пуст и объекты одного типа, потому чтоВы не должны использовать разные типы типов в NSDictionary.

например, {@"key1":NSString,@"key2":NSArray} // это демонстрация ошибки

...