#iphone #core-data
#iPhone #core-data
Вопрос:
NSError *error;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] amp;amp; ![managedObjectContext save:amp;error]) {
DLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
при сохранении некоторых элементов с приведенным выше кодом в CoreDate я получаю следующее исключение. managedObjectContext содержит 50 неразрешенных удалений и 700 неразрешенных вставок. очевидно, что у него проблема с удалениями. есть какие-нибудь идеи о том, как его отследить?
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSSet0 removeObject:]: unrecognized selector sent to instance 0x61a4840'
*** Call stack at first throw:
(
0 CoreFoundation 0x018d45a9 __exceptionPreprocess 185
1 libobjc.A.dylib 0x01a28313 objc_exception_throw 44
2 CoreFoundation 0x018d60bb -[NSObject(NSObject) doesNotRecognizeSelector:] 187
3 CoreFoundation 0x01845966 ___forwarding___ 966
4 CoreFoundation 0x01845522 _CF_forwarding_prep_0 50
5 CoreData 0x00ffa31d -[NSManagedObject(_NSInternalMethods) _excludeObject:fromPropertyWithKey:andIndex:] 397
6 CoreData 0x00fef7d1 -[NSManagedObject(_NSInternalMethods) _maintainInverseRelationship:forProperty:oldDestination:newDestination:] 449
7 CoreData 0x01043b55 -[NSManagedObject(_NSInternalMethods) _propagateDelete:] 1541
8 CoreData 0x00ffa02a -[NSManagedObject(_NSInternalMethods) _propagateDelete] 42
9 CoreData 0x00ff9e53 -[NSManagedObjectContext(_NSInternalChangeProcessing) _propagateDeletesUsingTable:] 515
10 CoreData 0x00ff9c12 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processDeletedObjects:] 146
11 CoreData 0x00fecba8 -[NSManagedObjectContext(_NSInternalChangeProcessing) _propagatePendingDeletesAtEndOfEvent:] 104
12 CoreData 0x00fb8982 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] 754
13 CoreData 0x00ff2715 -[NSManagedObjectContext save:] 149
14 Ace Metrix iPad 0x00075153 [CoreDataHelper saveCoreDate:] 82
15 Ace Metrix iPad 0x0007a790 -[WSBreakingAds platformRequestFinishedWhidType:withResponse:] 772
16 Ace Metrix iPad 0x00077c6d -[PlatformContainer operation:completedWithResponse:withNSManagedObjectContext:] 1042
17 Ace Metrix iPad 0x000401ec -[WebServiceAuthServiceSoapBinding_getPartialAdvertisementsAfterDate connectionDidFinishLoading:] 1209
18 Foundation 0x00182112 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] 108
19 Foundation 0x0018206b _NSURLConnectionDidFinishLoading 133
20 CFNetwork 0x00dec492 _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE 220
21 CFNetwork 0x00eb76e1 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl 293
22 CFNetwork 0x00de2c84 _ZN19URLConnectionClient13processEventsEv 100
23 CFNetwork 0x00de2ad3 _ZN17MultiplexerSource7performEv 251
24 CoreFoundation 0x018b58ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 15
25 CoreFoundation 0x0181388b __CFRunLoopDoSources0 571
26 CoreFoundation 0x01812d86 __CFRunLoopRun 470
27 CoreFoundation 0x01812840 CFRunLoopRunSpecific 208
28 CoreFoundation 0x01812761 CFRunLoopRunInMode 97
29 GraphicsServices 0x01e3e1c4 GSEventRunModal 217
30 GraphicsServices 0x01e3e289 GSEventRun 115
31 UIKit 0x003eec93 UIApplicationMain 1160
32 Ace Metrix iPad 0x00002814 main 102
33 Ace Metrix iPad 0x000027a5 start 53
)
terminate called after throwing an instance of 'NSException'
Ответ №1:
Вы вызываете removeObject:
неизменяемый экземпляр NSSet
. Убедитесь, что набор, с которым вы работаете, является экземпляром NSMutableSet
. Нам могло бы помочь, если бы вы могли опубликовать код, в котором вы фактически выполняете удаления.
Комментарии:
1. на самом деле это код, который вызывается removeObject: . функции сохранения выполняют вызов где-то внутри.
2. хорошо .. итак, как вы выполняете удаление? Просматриваете ли вы какие-либо взаимосвязи в процессе?
3. объекты помечаются для удаления с помощью [managedObjectContext DeleteObject: object]; затем фактически удаляются в команде сохранения. объекты находятся в NSArray, когда для них вызывается эта функция.
4. Сможете ли вы опубликовать код, в котором вы фактически перебираете свою коллекцию объектов и вызываете [managedObjectContext DeleteObject: object]; ? Спасибо.
5. оказывается, там, где некоторые NSSets в моей модели. я заменил их все на NSMutableSets, и теперь приложение работает нормально.