Я получаю следующую ошибку:
'NSInvalidArgumentException', причина: 'Недопустимая попытка установить условие' отношения 'между объектами в разных контекстах
при запускемое приложение для iphone.Соответствующая часть моей модели выглядит следующим образом:
AssessmentTree
-has one TreeCrown
TreeCrown
-has one TreeCrownCondition
-has one AssessmentTree
TreeCrownCondition
-has many TreeCrowns
Ради контекста я упомяну, что эта часть модели предназначена для того, чтобы древовидный мастер мог записывать состояние кроны дерева.В нем хранится список параметров для оценки кроны дерева, которые также могут быть отредактированы пользователем (поэтому TreeCrownConditions содержит параметры, а TreeCrown.condition указывает на определенный выбор, сделанный в оценке).
У меня естьUIPickerView, который загружает эти опции и связывает выбранную опцию с AssessmentTree, используя следующий код в didSelectRow: inComponent:
TreeCrownCondition *fc = (TreeCrownCondition *)[conditionArray objectAtIndex:[conditionPicker selectedRowInComponent:0]];
tree.crown.condition = fc;
Когда я запускаю это, первые несколько раз я выбираю опцию, все в порядке, ноиногда (обычно после добавления / редактирования / удаления опции TreeCrownCondition) приложение вылетает в вышеуказанных строках с ошибкой, которую я опубликовал в начале.
Ошибка кажется простой, исправить , за исключением что я использую только один NSManagedObjectContext на протяжении всего моего приложения.Каждый новый контроллер захватывает его, когда загружается со следующим кодом:
if(!managedObjectContext){
managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
Я не смог найти очень много информации об этой ошибке или о том, как ее исправить, и, конечно, я не нашел никого, кто быбыла эта проблема без использования нескольких контекстов.
Я могу только предположить, что у меня как-то есть несколько контекстов, но я не понимаю, как это возможно.Чего мне не хватает?
Редактировать Вот трассировка стека:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'condition' between objects in different contexts (source = <TreeCrown: 0x64b9f00> (entity: TreeCrown; id: 0x648db30 <x-coredata://6E17F271-7670-44EA-9901-5AB58DCA8AC7/TreeCrown/p3> ; data: {
condition = "0x64e5c50 <x-coredata://6E17F271-7670-44EA-9901-5AB58DCA8AC7/TreeCrownCondition/p4>";
images = "<relationship fault: 0x64d5e10 'images'>";
recommendation = "0x64a5320 <x-coredata://6E17F271-7670-44EA-9901-5AB58DCA8AC7/TreeCrownRecommendation/p1>";
tree = "0x6488f70 <x-coredata://6E17F271-7670-44EA-9901-5AB58DCA8AC7/AssessmentTree/p1>";
}) , destination = <TreeCrownCondition: 0xf218a40> (entity: TreeCrownCondition; id: 0xf215c20 <x-coredata://6E17F271-7670-44EA-9901-5AB58DCA8AC7/TreeCrownCondition/p2> ; data: <fault>))'
*** Call stack at first throw:
(
0 CoreFoundation 0x029d5919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x027ea5de objc_exception_throw + 47
2 CoreData 0x02461810 _PFManagedObject_coerceValueForKeyWithDescription + 1248
3 CoreData 0x02478245 _sharedIMPL_setvfk_core + 197
4 CoreData 0x0247bfe7 _svfk_0 + 39
5 landscapes 0x0000e569 -[AssessmentTreeCRViewController pickerView:didSelectRow:inComponent:] + 571
6 UIKit 0x004647aa -[UIPickerView _sendSelectionChangedForComponent:] + 100
7 UIKit 0x00602ed3 -[UIScroller _scrollAnimationEnded] + 130
8 UIKit 0x0050e792 -[UIAnimator stopAnimation:] + 467
9 UIKit 0x0050e557 -[UIAnimator(Static) _advance:] + 298
10 GraphicsServices 0x034c856d HeartbeatTimerCallback + 35
11 CoreFoundation 0x029b6d43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
12 CoreFoundation 0x029b8384 __CFRunLoopDoTimer + 1364
13 CoreFoundation 0x02914d09 __CFRunLoopRun + 1817
14 CoreFoundation 0x02914280 CFRunLoopRunSpecific + 208
15 CoreFoundation 0x029141a1 CFRunLoopRunInMode + 97
16 GraphicsServices 0x034c52c8 GSEventRunModal + 217
17 GraphicsServices 0x034c538d GSEventRun + 115
18 UIKit 0x0047cb58 UIApplicationMain + 1160
19 landscapes 0x00001eb6 main + 104
20 landscapes 0x00001e45 start + 53
)
terminate called after throwing an instance of 'NSException'