Хорошо, давайте начнем с кода. Я перебираю возвращаемый массив словарей и создаю (или обновляю) объекты на их основе. В этом методе я пытаюсь найти или создать новый объект. И если объект должен быть удален, я бы хотел сделать это и не тратить время на обновление новой информации.Как удалить новые объекты из NSManagedObjectContext
- (void)updateOrCreateObjectWith:(NSDictionary*)dictionary {
RKManagedObjectStore *objectStore = ((MyAppDelegate*)[[UIApplication sharedApplication] delegate]).objectStore;
id updateObject = (NSManagedObject*)[objectStore findOrCreateInstanceOfEntity:[resource entity] withPrimaryKeyAttribute:@"myID" andValue:[dictionary objectForKey:@"id"]];
[updateObject setMyID:[dictionary objectForKey:@"id"]];
// if marked for deletion, delete it now
if ([[dictionary objectForKey:@"deleted_at"] isKindOfClass:[NSString class]]) {
if ([updateObject isNew]){
NSError *error = nil;
[objectStore.managedObjectContext save:&error];
if (error) {
NSLog(@"error saving before delete: %@",error);
return;
}
// [objectStore.managedObjectContext deleteObject:updateObject];
// [objectStore.managedObjectCache delete:updateObject];
}
else {
[objectStore.managedObjectContext deleteObject:updateObject];
}
return;
}
[updateObject updateWith:dictionary];
}
Часть, чтобы быть в курсе, секция deleted_at с секцией (1) сохранить, (2) удалить объект из контекста, и (3) удалить объект из кэша. Я пробовал несколько комбинаций из этих трех, но я не получаю желаемых результатов.
Если удалить из кэша (только # 3):
- Объектов спасутся, но они не имеют атрибутов.
Если я удалить его из управляемого контекста (только # 2) я получаю:
NSUnderlyingException=Cannot update object that was never inserted.
Поскольку он никогда не был включен, я думал, что сохранить его, а затем удалить его (# 1 и # 2), но затем я получаю:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xed27810 <x-coredata://4EE6AD5A-CC34-460A-A97A-0909454126A4/User/p166>''
Так что правильный способ, чтобы удалить «новый» объект из NSMangedObjectContext?
Благодарим за ответ. Наверное, я пытался поместить квадратный колышек в круглое отверстие. Я использую единственный RKManagedObjectStore, потому что у меня возникли проблемы, когда я пытаюсь построить отношения с моими объектами после загрузки. Я просто не знаю, что я знаю. Любые предложения для этого? – RyanJM
Общий RKManagedObjectStore, вероятно, такой же, как объект objectStore делегата, если вы не установили свойство objectStore в sharedManager. Что касается вашего другого вопроса, трудно ответить, не видя какого-либо кода; вам следует рассмотреть вопрос о публикации другого вопроса или запроса в группе google или в канале irc. –