[__NSCFSet iName]: нераспознанный селектор отправлен на экземпляр - PullRequest
1 голос
/ 11 июня 2011

Кажется, я просто не понимаю этого.

Это мой код

-(void)saveClicked:(id)sender{
    Item *item=[[Item alloc]init];
    item.iName=nameField.text;

    if ([appDelegate.list containsObject:item]) {
    //currentItem and item are object of class Item
    //currentItem was declared in the headerfile and synchronized
        currentItem=item;
        NSString *msg=[NSString stringWithFormat:@"%@ already exists in your Instock list",item.iName];
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"edit",nil];
        [alert show];
        [alert release];
    }
}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex==0) {
    }
    else {
        //getting the error here
        NSLog(@"%@",currentItem.iName);
    }
}

ОШИБКА:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet iName]: unrecognized selector sent to instance 0x5e280b0'

Понятия не имею, почему это происходит.Помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Предположим, у вас currentItem как retain свойство, попробуйте использовать ниже с вашим saveClicked:

    self.currentItem = item;

Итак, ваш код должен быть ...

-(void)saveClicked:(id)sender{
    Item *item=[[Item alloc]init];
    item.iName=nameField.text;

    if ([appDelegate.list containsObject:item]) {
    //currentItem and item are object of class Item
    //currentItem was declared in the headerfile and synchronized

        self.currentItem = item;

        NSString *msg=[NSString stringWithFormat:@"%@ already exists in your Instock list",item.iName];
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"edit",nil];
        [alert show];
        [alert release];
    }
    [item release];
}
0 голосов
/ 11 июня 2011

Нет смысла выпускать item, поскольку это будет означать, что вы приобрели право собственности только один раз и отказываетесь от него. Таким образом, currentItem будет указывать на освобожденный объект. Вы должны будете вступить во владение, сохранив объект, а затем отпустив его, как только закончите с объектом.

...