核心数据删除不成功*易于修复?*

时间:2012-06-19 16:17:33

标签: objective-c ios core-data nsmanagedobject nsmanagedobjectcontext

我有一个简单的XCDataModel,它包含一个具有一个属性的实体。基本上,我正在保存一系列日期。

现在,我知道我正在正确添加NSDates,因为我在添加它们之后运行了一个获取请求,并像这样运行结果:

for (NSManagedObject *info in fetchedObjects) {
    NSLog(@"Name: %@", [info valueForKey:@"attribute"]);
}

每一个额外的NSDate都被考虑在内。日志示例:

2012-06-19 12:40:38.531 Arts Days[47194:16103] Name: 2013-03-27 04:00:00 +0000
2012-06-19 12:40:38.531 Arts Days[47194:16103] Name: 2013-03-01 05:00:00 +0000
2012-06-19 12:40:38.532 Arts Days[47194:16103] Name: 2013-01-01 05:00:00 +0000

现在,当我尝试从Core Data中删除一个对象时,它被证明是不成功的(通过运行相同的提取并再次运行结果)。

这是获取:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:366];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

NSError *error = nil;

[fetchRequest setSortDescriptors:sortDescriptors];

NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

for (NSManagedObject *object in fetchedObjects) {
    if ([[object valueForKey:@"date"] isEqualToDate:date]) {
        [managedObjectContext deleteObject:object];
    }
}
if (![managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

此外,带有未解决错误的NSLog包含nil nil ...

你知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

您似乎使用了两个不同的NSManageObjectContext个实例。 self.managedObjectContext(ivar)设置您的获取请求并执行提取,但是本地实例执行deleteObject:save:操作。本地实例managedObjectContext可能为零,而不是指与ivar相同的对象。