表中的核心数据选择计数(*)与select * from table不同

时间:2014-10-08 09:08:17

标签: objective-c xcode core-data

到目前为止,我一直在使用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次,它似乎没有删除任何内容。

所以问题是:

  1. 为什么count(*)会返回不同的行数来选择*
  2. 这种方法有什么明显的错误(很高兴在其他地方工作但是如果有人发现任何事情让我知道。
  3. EDIT ***

    我尝试了以下内容:

    - 使用相同的名称重新创建表。 - 使用不同的名称重新创建表。 -rewrite加载过程以更紧密地匹配我的其他文件 -rewrite加载进程来执行单个实体加载而不是列表

    只有最后一个似乎有效,其他人都没有。仍然让我与其他实体加载但是取得进展

    修改 我为这个提出了一个关于苹果的错误,我不确定数据库是否会被破坏,但即使从头开始重写这个类,它也是完全可重复的。完全奇怪。

1 个答案:

答案 0 :(得分:0)

你所描述的根本不符合逻辑。如果从表中选择所有记录,则应该返回记录数。它们与计数方法不同是不可能的。

我怀疑您的数据已被破坏(您可能已经运行了4次初始化例程或类似的事情)。我建议你从模拟器中删除应用程序(或重置模拟器),然后从头开始重试。监视插入此表的时间和频率。

您可能还会首先尝试使用delete from zmccountry;手动清理表格。