首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除iOS NSManagedObject Data <fault>

删除iOS NSManagedObject Data <fault>
EN

Stack Overflow用户
提问于 2013-02-15 14:37:45
回答 2查看 331关注 0票数 1

我在从Core Data中删除条目时遇到了一些困难。

它可以工作,但是NSManagedObject数据没有值(错误),因此有时会删除错误的条目。

在我的deleteWholeDatabase方法中,对象被填充了值。而在deleteEntryFromDatabase方法中没有值。但是为什么呢?

以下是我的方法:

代码语言:javascript
复制
-(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]]);
}
EN

回答 2

Stack Overflow用户

发布于 2013-02-15 14:57:27

错误的条目正在被删除,因为每个请求以不同的顺序返回itens。尝试通过比较它们的记忆入口来删除它们。

票数 0
EN

Stack Overflow用户

发布于 2013-02-15 15:40:17

我将保留一个NSManagedObjectID's的本地副本作为数组,而不是到处保留一个调用的NSManagedObjectID's

代码语言:javascript
复制
- (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中获取正确的实体即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14897007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档