【发布时间】:2012-06-07 21:01:54
【问题描述】:
我正在尝试删除一个核心数据实体,无论我使用什么删除规则,它都不起作用。它根本不做任何事情。
我正在使用 Firefox 的 Sqlite Add-on 浏览核心数据数据库,删除代码运行后我可以看到那里的所有行。
我的删除代码是这样的
+(void)deleteCustomerWithID:(int)customerid inManagedObjectContext:(NSManagedObjectContext *)context
{
Customer *customer = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Customer"];
request.predicate = [NSPredicate predicateWithFormat:@"id = %d", customerid];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"organization" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error = nil;
NSArray *customers = [context executeFetchRequest:request error:&error];
if (!customers || ([customers count] > 1)) {
// handle error
} else if (![customers count]) {
// customer not found
} else {
customer = [customers lastObject];
[context deleteObject:customer];
NSError *error;
if(![context save:&error]){
NSLog(@"Unresolved error series %@, %@", error, [error userInfo]);
}
}
}
任何想法我做错了什么?
【问题讨论】:
-
它是否有可能通过其他 if/else 分支之一?
Customer是否与定义的“拒绝”删除规则有任何关系? (我看到你说“不管删除规则是什么”,但你检查过所有关系吗?) -
没有任何实体的拒绝规则..
-
您是否 100% 确定带有
deleteObject:方法调用的 if 分支已执行并且没有保存错误?当您手动删除对象时,删除规则不应在这里发挥任何作用。 -
是的 100% 确定 - 我通过断点进行了检查