2016-05-05 4 views
0

У меня есть объект с именем Geometry, который связан с объектом Plot. В нашей части кода, с учетом Plot и некоторых загруженных данных, хранящихся в NSDictionary, мы должны получить Geometry и установить некоторые свойства NSString, но после этого я обнаружил, что связь между объектами теряется.Отношения основных данных, потерянные после редактирования вложенного объекта

NSError * saveError = nil; 

NSFetchRequest * request = [[NSFetchRequest alloc] initWithEntityName:[Geometry entityName]]; 
request.predicate = [NSPredicate predicateWithFormat:@"plot == %@", plot]; 
NSError * error = nil; 
NSArray * results = [context executeFetchRequest:request error:&error]; 

Geometry * __block geometry = nil; 

if ([results count] > 0) { 
    [results enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop) { 
     Geometry * geometryObject = obj; 
     if ([geometryObject.gid isEqualToString:[NSString stringWithFormat:@"%@", [data valueForKey:@"gid"]]]) { 
      geometry = geometryObject; 
      stop = YES; 
     } 
    }]; 
} 

if (geometry != nil) { 
    [geometry setPolygon:[NSString stringWithFormat:@"%@", [data valueForKey:@"polygon"]]]; 
} 

if (![context save:&saveError]) { 
    NSLog(@"%@", saveError); 
} 

Первый раз, когда я запускаю этот код results один объект, но в следующий раз, когда я запускаю это не results.

Предположим, что все, что выходит за рамки этой части кода, работает правильно. Любой намек или подсказка о том, почему это происходит? Как я могу это решить?

EDIT: Проблема была решена за пределами размещенного кода и вне сферы действия этого вопроса. Я должен был должным образом пересмотреть код дальше.

+0

Почему вы перечисляете результаты вместо того, чтобы изменять предикат, чтобы в первую очередь вернуть один объект «Геометрия»? – Avi

+0

@Avi Если есть несколько результатов, они обрабатываются за пределами этого кода. – JordiVilaplana

ответ

1

В коде отсутствует ничто, и эта информация нарушает наши отношения. Ошибка должна быть в другом месте.

У вас есть Plot объекта, так что вы можете получить геометрии с plot.geometries без запроса выборки, и фильтровать их без петли:

Geometry *geometry = [plot.geometries 
    filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"gid = %@", gidString]] 
    .firstObject 

geometries, где этого имя обратной связи для plot.

Теперь вы можете установить polygon и сохранить его. Проверьте свой метод setPolygon, если вы не удаляете отношения.

+0

Спасибо, что ответили, @Mundi. К сожалению, проблема решена по-другому. Помните цитату «Предположите, что все, что выходит за рамки этой части кода, работает правильно» в моем вопросе? Пожалуйста, не думайте, что я не должен. Активировано, потому что это помогло улучшить мой код. – JordiVilaplana

+1

Я обновил ответ, чтобы вы могли его принять и закрыть эту проблему. – Mundi

Смежные вопросы