我在从Core Data中删除条目时遇到了一些困难。
它可以工作,但是NSManagedObject数据没有值(错误),因此有时会删除错误的条目。
在我的deleteWholeDatabase方法中,对象被填充了值。而在deleteEntryFromDatabase方法中没有值。但是为什么呢?
以下是我的方法:
-(NSArray*)databaseRequest{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:currentEntity inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
return items;
}
-(void)deleteWholeDatabase{
for (NSManagedObject *objectToDelete in [self databaseRequest]) {
[managedObjectContext deleteObject:objectToDelete];
NSLog(@"%@ object deleted",objectToDelete);
}
[self saveContext];
NSLog(@"All entries deleted!");
}
-(void)deleteEntryFromDatabase:(NSManagedObjectContext*)context forEntry:(NSIndexPath*)indexPath{
NSManagedObject *objectToDelete=[[self databaseRequest] objectAtIndex:indexPath.row];
[managedObjectContext deleteObject:[managedObjectContext objectWithID:[objectToDelete objectID]]];
[self saveContext];
NSLog(@"%@ deleted!",[managedObjectContext objectWithID:[objectToDelete objectID]]);
}发布于 2013-02-15 14:57:27
错误的条目正在被删除,因为每个请求以不同的顺序返回itens。尝试通过比较它们的记忆入口来删除它们。
发布于 2013-02-15 15:40:17
我将保留一个NSManagedObjectID's的本地副本作为数组,而不是到处保留一个调用的NSManagedObjectID's。
- (void)init {
self.entities = [self databaseRequest];
}
-(NSArray*)databaseRequest{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:currentEntity inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSMutableArray *itemIDs = [[NSMutableArray alloc] initWithCapacity:[items count]];
for (NSManangedObject *item in items) {
[itemIDs addObject:[item objectID]];
}
return items;
}然后,无论您在哪里调用[self databaseRequest],都会得到一个正确的NSManagedObjectID。然后您只需从ID中获取正确的实体即可。
https://stackoverflow.com/questions/14897007
复制相似问题