обновление выбранного объекта приводит к ошибке «нераспознанный селектор отправлен в экземпляр» - PullRequest
0 голосов
/ 13 июля 2010

Попытка обновить извлеченный объект и получение ошибки «нераспознанный селектор отправлен в экземпляр» всякий раз, когда я пытаюсь установить какое-либо свойство объекта, вот мой код:

NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSEntityDescription *entities = [NSEntityDescription entityForName:@"PurchaseOrderItem" inManagedObjectContext:managedObjectContext];
[request setEntity:entities];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ItemSKU=%@",collectionItem.ItemSKU];
[request setPredicate:predicate];

NSArray *results= [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

    if ([results count]==0) {
     /* add another purchase order item */
    PurchaseOrderItem *newPOItem = (PurchaseOrderItem*) [NSEntityDescription insertNewObjectForEntityForName:@"PurchaseOrderItem" inManagedObjectContext:managedObjectContext];
    [newPOItem setProductName:productName.text];
    [newPOItem setPrice:price];
    [newPOItem setQuantity:qty];
    [newPOItem setItemSKU:ItemSKU];
    [newPOItem setSubTotal:itemSubTotal];   
        }else {
    /* update item */
    PurchaseOrderItem *updateObject = (PurchaseOrderItem*)[results objectAtIndex:0];
    [updateObject setSubTotal:itemSubTotal];
    [updateObject setQuantity:qty];
        }

EDIT: вот точная ошибка:

2010-07-12 22:07:37.920 RCoreData[46733:207] *** -[PurchaseOrder setSubTotal:]: unrecognized selector sent to instance 0x587b270
2010-07-12 22:07:37.921 RCoreData[46733:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[PurchaseOrder setSubTotal:]: unrecognized selector sent to instance 0x587b270'
2010-07-12 22:07:37.921 RCoreData[46733:207] Stack: (
    46504016,
    47661868,
    46512731,
    45975158,
    45971954,
    209089,
    3382510,
    3879998,
    3889344,
    3884141,
    3509736,
    3401283,
    3432920,
    53940604,
    45783196,
    45779112,
    53934237,
    53934434,
    3425138,
    10940,
    10794
)
terminate called after throwing an instance of 'NSException'

Примечание: добавление элемента работает отлично, часть обновления выдает ошибку:

/* update item */
  PurchaseOrderItem *updateObject = (PurchaseOrderItem*)[results objectAtIndex:0];
  [updateObject setSubTotal:itemSubTotal];
  [updateObject setQuantity:qty];

Ответы [ 2 ]

1 голос
/ 13 июля 2010
PurchaseOrderItem *newPOItem = (PurchaseOrderItem*) [NSEntityDescription insertNewObjectForEntityForName:@"PurchaseOrderItem" inManagedObjectContext:managedObjectContext];

Я думаю, что эта строка имеет проблемы. Вы уверены, что ваш newPOItem находится в правильном классе, вы уверены, что приведение работает хорошо? Можете ли вы попробовать с некоторым кодом, как: [newPOItem isKindOfClass:] and [newPOItem respondsToSelector:]

0 голосов
/ 13 июля 2010

Во-первых, приведение совершенно не нужно.И -insertNewObjectForEntityForName:inManagedObjectContext:, и -objectAtIndex: возвращают id, который является универсальным объектом.Приведение не делает ничего .

Во-вторых, когда вы запускаете это в отладчике, что вы получаете, когда вы

po 0x587b270

Это скажет вам, какой это объектпытаясь отправить сообщение.

В-третьих, вы не проверяете ошибку.Вы должны всегда проверять ошибку, прежде чем начинать манипулировать возвращаемым массивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...