到目前为止,我一直在使用iphone的核心数据几个月没有任何问题。我创建了一个新表,并将其他类的一些基本代码复制到我的新类中,删除表中的所有条目,然后再次加载表。
我正在使用以下方法从表中删除:
-(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行。当我调试这个删除方法时,fetchedObjects对象包含271行,然后循环271次删除它。
事情是该表目前包含1084行。所以我从zmccountry运行了select count(*),它给了我271行。 1084/271是4,所以我运行了这个脚本4次,它似乎没有删除任何内容。
所以问题是:
EDIT ***
我尝试了以下内容:
- 使用相同的名称重新创建表。 - 使用不同的名称重新创建表。 -rewrite加载过程以更紧密地匹配我的其他文件 -rewrite加载进程来执行单个实体加载而不是列表
只有最后一个似乎有效,其他人都没有。仍然让我与其他实体加载但是取得进展
修改 我为这个提出了一个关于苹果的错误,我不确定数据库是否会被破坏,但即使从头开始重写这个类,它也是完全可重复的。完全奇怪。
答案 0 :(得分:0)
你所描述的根本不符合逻辑。如果从表中选择所有记录,则应该返回记录数。它们与计数方法不同是不可能的。
我怀疑您的数据已被破坏(您可能已经运行了4次初始化例程或类似的事情)。我建议你从模拟器中删除应用程序(或重置模拟器),然后从头开始重试。监视插入此表的时间和频率。
您可能还会首先尝试使用delete from zmccountry;
手动清理表格。