核心数据,保存或检索时的问题,不知道它在哪里

时间:2012-01-25 10:42:44

标签: sqlite core-data save nsfetchrequest persistent-storage

我对Core Data很新,而且我遇到了一个我不明白的问题。我不知道出了什么问题。

我正在保存到我的持久存储中,使用以下代码从JSON文件中读取实体“权重”的7个对象:

for (NSDictionary *values in aWeightValues)
    {
        weightValues = [NSEntityDescription insertNewObjectForEntityForName:@"Weight" 
                                                     inManagedObjectContext:moc];

        [weightValues setValue:[typeWeight objectForKey:@"unit"] forKey:@"unit"];
        [weightValues setValue:[values objectForKey:@"timestamp"] forKey:@"date"];
        [weightValues setValue:[values objectForKey:@"value"] forKey:@"amount"];

        if (![moc save:&error])
        {
            NSLog(@"Problem saving: %@", [error localizedDescription]);
        }
    }

for循环产生7个循环,这意味着它被正确保存(谈论对象的数量)。

但是,当我尝试以这种方式从持久存储中检索数据时:

-(NSMutableArray *) extractWeightEntities 
{
    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
    NSError *error;
    NSManagedObjectContext *moc = [appDelegate managedObjectContext];

    NSEntityDescription *entityWeight = [NSEntityDescription entityForName:@"Weight" inManagedObjectContext:moc];
    NSFetchRequest *request = [[[NSFetchRequest alloc]init]autorelease];
    [request setEntity:entityWeight];
    entityWeight = nil;

    fetchResult = [[moc executeFetchRequest:request error:&error]mutableCopy];
    return (fetchResult);

}

并尝试显示检索到的每个对象的一个​​属性,我在TableView中获得了1044行!什么时候我应该只有7岁。

我做错了什么?我在保存或正在检索时出现问题吗?

我希望你能帮忙解决这个问题。非常感谢提前!!

1 个答案:

答案 0 :(得分:1)

您不需要在循环的每次迭代中调用save,这是非常低效的。之后保存。

在你的循环上加一个断点,并确保它只会超过它7次。

数据是否在不断累积?你每次都在删除应用程序吗?如果继续运行代码 - 它将继续向数据存储区添加对象,除非在插入数据存储区之前检查它们是否存在于数据存储区中。