2013-02-26 2 views
7

Код ниже не удаляет сущность. На консоли появится сообщение «удалить было успешно», чтобы сущность была найдена. Все остальные операции, которые я использую, преуспевают.Не удается удалить объект из базовых данных, используя RestKit 0.20

Я пользуюсь RestKit 0.20.

NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
NSError *error = nil; 

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Auction" inManagedObjectContext:context]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"AuctionID = %d", auctionID]; 
[fetchRequest setPredicate:predicate]; 

NSArray *result = [context executeFetchRequest:fetchRequest error:&error]; 
if(result.count) { 
    Auction *block = result[0]; 
    [context deleteObject:block]; 
    BOOL status = [context save:&error]; 
    if (status == NO) { 
     NSLog(@"delete falied for AuctionID:%d, error: %@", auctionID, error); 
    } 
    else { 
     [context processPendingChanges]; 
     NSLog(@"delete was successful for AuctionID:%d", auctionID); 

    } 
} 

Почему эта операция удаления не может быть успешной и каково решение проблемы ее работы.

+0

Где вы видите экземпляр после его удаления? –

+0

Я использую сторонний инструмент «База» в файле * .sqlite в симуляторе. Я могу удалить объекты с помощью инструмента. – zaph

+0

Я действительно задавался вопросом, что является симптомом проблемы, и когда вы видите, что это происходит. Вы сказали, что у вас проблемы с удалением данных, поэтому, когда вы видите предметы, которые, по вашему мнению, были удалены? –

ответ

5

Я нашел это решение:

В самом деле, вы должны принести ДАННЫЕ от persistentstore, а не ток, создаваемый управляемый контекст:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyModel"]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO]; 
fetchRequest.sortDescriptors = @[descriptor]; 

// Setup fetched results 
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                     managedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 

// AND TO DELETE A MODEL : 

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:myobject]; 
+0

Спасибо :) Если вы найдете лучшее решение, не стесняйтесь его назначать – Sebastien

+0

Это решит проблему. Проблема заключалась в контексте: «[RKManagedObjectStore defaultStore] .строчныйStoreManagedObjectContext' был точным исправлением. – zaph

2

Я делаю то же самое и имею почти такой же код. В моем коде также, я получаю удаление сделано и сохранено ....

Но, его не удаляли, когда я проверяю DB.

проблема не в симуляторе ... SURE bcz Я получаю такую ​​же проблему и на устройстве. есть что-то, называемое детским контекстом, это может быть причиной ... Проверьте эти ссылки http://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 — What is the preferred way to create a new NSManagedObject? . Если вы нашли решение PLS долю здесь

+0

Такая же ошибка, любая идея? – Sebastien

+0

Убедитесь, что вы проверяете базу данных после остановки приложения. Поскольку изменения не отражаются, если они не связаны. Итак, Удалить -> отключить и проверить. В моем случае он все еще не удалялся после проверки этого типа. И да, теперь я могу удалить его явно, но это неправильно, его нужно удалить только с помощью restkit. Если кто-то из вас получит решение pls, отправьте сюда – Sumitiscreative

2

@Sumitiscreative я побежал в этот же вопрос сегодня. Что, если было обнаружено, что, как правило, с использованием Core Data вы должны использовать

для его сохранения. Я порылся Restkit немного и нашел этот

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:(NSManagedObject *)]; 
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext saveToPersistantStore:(NSError *)]; 

Calling это после того, как выше метод удаления работает, чтобы удалить объект из БД.

** Edit - Кроме того, я бы просто сделал это замечание, но я не имею вариант

1

@Lance Эй, пожалуйста обновить restkit с последней версией. Как и сейчас, это работает в последней версии, если ваша конфигурация, связанная с сервером, верна. и если вы получите коды успеха для вашего запроса на удаление с сервера. Затем restkit автоматически удаляет данные.

Если вам нужно удалить любые данные извне, вы можете использовать persistentStoreManagedObjectContext и после удаления сохранить его.

Кроме того, если вы хотите в конце концов проверить, правильно ли он удаляется с помощью restkit или нет. что вы можете сделать это ...

сделать удаление запрос, после успеха проверка с этим же идентификатором, если товар есть. (только для справки)

Смежные вопросы