Objective c 表中的核心数据选择计数(*)与表中的选择计数*不同
到目前为止,我已经在iphone上使用了几个月的核心数据,没有任何问题。我创建了一个新表,并将其他类中的一些基本代码复制到我的新类中,该类删除表中的所有条目,然后再次加载表 我使用以下方法从表中删除:Objective c 表中的核心数据选择计数(*)与表中的选择计数*不同,objective-c,xcode,core-data,Objective C,Xcode,Core Data,到目前为止,我已经在iphone上使用了几个月的核心数据,没有任何问题。我创建了一个新表,并将其他类中的一些基本代码复制到我的新类中,该类删除表中的所有条目,然后再次加载表 我使用以下方法从表中删除: -(void) deleteFromEntity { NSError *error = nil; NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request
-(void) deleteFromEntity
{
NSError *error = nil;
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MCCountry" inManagedObjectContext:context];
[request setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:request error:&error];
for (NSManagedObject *object in fetchedObjects) {
[context deleteObject:object];
}
if (![context save:&error]) {
NSLog(@"ERROR: %@", [error localizedDescription]);
}
}
现在的问题是加载过程加载271行。当我调试这个delete方法时,fetchedObjects对象包含271行,然后循环271次删除
问题是该表当前包含1084行。所以我从zmccountry运行selectcount(*),它给了我271行。1084/271是4,所以我已经运行了4次这个脚本,它似乎没有删除任何内容
所以问题是:
为此,我向苹果公司提出了一个错误,我不确定数据库是否以某种方式损坏,但即使从头重写类,它也是完全可重复的。非常奇怪。你所描述的完全不符合逻辑。如果你从一个表中选择所有记录,你应该返回记录的数量。它们不可能被删除与计数方法不同 我怀疑您的数据不知何故已损坏(您可能已运行初始化例程4次或类似操作)。我建议您从模拟器中删除应用程序(或重置模拟器),然后从头开始重试。监视您何时以及多久插入此表
您也可以首先尝试使用
delete from zmccountry;
方法手动清理表。您说select*和count(*)返回时会产生不同的结果,但您说加载过程会加载271行和count(*)返回271?您能澄清一下吗?每次运行table load方法时,它都会加载271条记录。当我运行select count(*)时从表中;它返回271条记录。当我运行select*from table时,我在输出中得到1084条记录。您可以在delete方法中查看它拾取了多少条记录吗?如何检查总行?是否使用sql编辑器直接扫描.sqlite文件?如果是这样,我想核心数据不会删除sqlite表中的行,而是会标记它们在其支持文件中被删除。NSLog(@“国家%lu的已删除计数”,(无符号长)[FetchedObject计数])为我提供了国家271的已删除计数。选择计数(*)仍然是271,而选择*现在是813(我做了重置只是为了继续工作)我完全同意你的说法。我在数据库上工作了很多年,但直到最近才在核心数据和sqlite上工作。我尝试过重建和重置模拟器。事实上,目前唯一可行的方法是在测试运行之间进行此操作,否则数据会被破坏。我想我会尝试重建