Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 表中的核心数据选择计数(*)与表中的选择计数*不同_Objective C_Xcode_Core Data - Fatal编程技术网

Objective c 表中的核心数据选择计数(*)与表中的选择计数*不同

Objective c 表中的核心数据选择计数(*)与表中的选择计数*不同,objective-c,xcode,core-data,Objective C,Xcode,Core Data,到目前为止,我已经在iphone上使用了几个月的核心数据,没有任何问题。我创建了一个新表,并将其他类中的一些基本代码复制到我的新类中,该类删除表中的所有条目,然后再次加载表 我使用以下方法从表中删除: -(void) deleteFromEntity { NSError *error = nil; NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request

到目前为止,我已经在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行。当我调试这个delete方法时,fetchedObjects对象包含271行,然后循环271次删除

问题是该表当前包含1084行。所以我从zmccountry运行selectcount(*),它给了我271行。1084/271是4,所以我已经运行了4次这个脚本,它似乎没有删除任何内容

所以问题是:

  • 为什么count(*)返回要选择的不同行计数*
  • 这种方法有什么明显的错误吗(它在其他地方很有效,但如果有人发现任何问题,请告诉我)
  • 编辑***

    我尝试了以下方法:

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

    只有最后一个似乎起作用了,其他的都没起作用。我仍然要加载其余的实体,但正在取得进展

    编辑
    为此,我向苹果公司提出了一个错误,我不确定数据库是否以某种方式损坏,但即使从头重写类,它也是完全可重复的。非常奇怪。

    你所描述的完全不符合逻辑。如果你从一个表中选择所有记录,你应该返回记录的数量。它们不可能被删除与计数方法不同

    我怀疑您的数据不知何故已损坏(您可能已运行初始化例程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上工作。我尝试过重建和重置模拟器。事实上,目前唯一可行的方法是在测试运行之间进行此操作,否则数据会被破坏。我想我会尝试重建