Основные данные, проблемы при сохранении или извлечении, не знаю, где они находятся - PullRequest
0 голосов
/ 25 января 2012

Я довольно новичок в Core Data, и у меня возникла проблема, которую я не понимаю. Я не знаю, что происходит.

Я сохраняю в моем Persistent Store 7 объектов объекта «Weight», который читается из файла JSON с этим кодом:

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);

}

и попытаться показать один атрибут каждого полученного объекта, я получаю 1044 строки в моем TableView !! когда я должен был только 7.

Что я делаю не так? Это проблема при сохранении или при получении?

Надеюсь, вы поможете решить эту проблему. Большое спасибо заранее !!

1 Ответ

1 голос
/ 25 января 2012

Вам не нужно вызывать save на каждой итерации цикла, это очень неэффективно.Сохраните потом.

Установите точку останова на вашем контуре и убедитесь, что она проходит только 7 раз.

Постоянно накапливаются данные?Вы удаляете приложение каждый раз?Если вы продолжите выполнять код - он будет добавлять объекты в ваше хранилище данных, пока вы не проверите их, прежде чем вставлять их.

...