Основные данные, проблемы при сохранении или извлечении, не знаю, где они находятся
Я совершенно новичок в 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 раз.
Данные постоянно накапливаются? Вы удаляете приложение каждый раз? Если вы продолжите выполнять код - он будет продолжать добавлять объекты в ваше хранилище данных, пока вы не проверите их, прежде чем вставлять.