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

Posted

技术标签:

【中文标题】核心数据删除不成功*容易修复?*【英文标题】:Core Data Deletion Unsuccessful *easy fix?* 【发布时间】:2012-06-19 16:17:33 【问题描述】:

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

现在,我知道我正在正确添加 NSDates,因为我在添加它们后运行了一个 fetch 请求并运行了如下结果:

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 中删除一个对象时,它被证明是不成功的(通过运行相同的 fetch 并再次运行结果)。

这里是获取:

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...

你知道我做错了什么吗?

【问题讨论】:

如果这就是您的全部代码,那么您实际上从未使用您的fetchRequest 执行提取,而fetchObjects 为空(实际上是nil)。 我不小心漏掉了这条线 你调试过代码吗?是否按预期执行? 它的构建没有错误或警告。它没有按预期执行,因为对象只是没有删除。 我注意到你在代码中使用self.managedObjectContext 的其他地方,除了你调用deleteObjectsave: 的地方。会不会是您使用了无效的本地实例(nil)? 【参考方案1】:

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

【讨论】:

以上是关于核心数据删除不成功*容易修复?*的主要内容,如果未能解决你的问题,请参考以下文章

更新了核心数据模型,没有新版本,如何修复?

SQL SERVER数据库误删除误格式化误重装软件覆盖数据恢复修复

SQL SERVER数据库误删除误格式化误重装软件覆盖数据恢复修复

关于上级机构的冲突性测试bug修复

如何修复 Laravel 7 重定向导致 405 错误?

如何在 SQL 数据库中删除行后修复自动增量不连续?