Основные данные, проблемы при сохранении или извлечении, не знаю, где они находятся

Я совершенно новичок в 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 ответ

Решение

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

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

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

Другие вопросы по тегам