在RESTKit映射操作期间,使用sqlite持久性存储从CoreData内部访问错误

时间:2014-02-09 09:41:32

标签: sqlite core-data ios7 restkit restkit-0.20

我有一个非常讨厌的问题,导致我把头发撕掉。核心数据内部发生了错误的访问错误 - 在可见代码方面,我将其缩小为RESTKit一对一关系映射操作。

我正在使用sqlite作为持久存储。如果我使用内存等,并且仅在非空sqlite上重新启动app时发生此问题。

以下是来自NSManagedObjectContextQueue的堆栈跟踪:

#0  0x03b0380a in semaphore_wait_trap ()
#1  0x03699cde in _dispatch_thread_semaphore_wait ()
#2  0x03697516 in _dispatch_barrier_sync_f_slow ()
#3  0x03697413 in dispatch_barrier_sync_f ()
#4  0x010562a2 in _perform ()
#5  0x01056ebe in -[NSManagedObjectContext(_NestedContextSupport) newValueForRelationship:forObjectWithID:withContext:error:] ()
#6  0x0105f1c4 in -[NSFaultHandler retainedFulfillAggregateFaultForObject:andRelationship:withContext:] ()
#7  0x0105eb97 in -[_NSFaultingMutableSet willRead] ()
#8  0x0105c204 in -[_NSFaultingMutableSet containsObject:] ()
#9  0x0104ec9e in -[NSManagedObject(_NSInternalMethods) _includeObject:intoPropertyWithKey:andIndex:] ()
#10 0x0104eae4 in -[NSManagedObject(_NSInternalMethods) _maintainInverseRelationship:forProperty:oldDestination:newDestination:] ()
#11 0x0104e332 in -[NSManagedObject(_NSInternalMethods) _didChangeValue:forRelationship:named:withInverse:] ()
#12 0x0104df88 in -[NSManagedObjectContext observeValueForKeyPath:ofObject:change:context:] ()
#13 0x02ce48c7 in NSKeyValueNotifyObserver ()
#14 0x02ce6206 in NSKeyValueDidChange ()
#15 0x02ca28dd in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#16 0x01030825 in _PF_ManagedObject_DidChangeValueForKeyIndex ()
#17 0x0102fcad in _sharedIMPL_setvfk_core ()
#18 0x010614a6 in -[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) _setGenericValue:forKey:withIndex:flags:] ()
#19 0x0104fb99 in _PF_Handler_Public_SetProperty ()
#20 0x0104fb23 in -[NSManagedObject setValue:forKey:] ()
#21 0x02d2470a in -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] ()
#22 0x002e7cc1 in -[RKMappingOperation mapOneToOneRelationshipWithValue:mapping:] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMappingOperation.m:608
#23 0x002eb688 in -[RKMappingOperation applyRelationshipMappings] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMappingOperation.m:801
#24 0x002ed9d0 in -[RKMappingOperation main] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMappingOperation.m:899
#25 0x02d6a829 in -[__NSOperationInternal _start:] ()
#26 0x02ce7558 in -[NSOperation start] ()
#27 0x002dc1b5 in -[RKMapperOperation mapRepresentation:toObject:atKeyPath:usingMapping:metadata:] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMapperOperation.m:242
#28 0x002db7dc in __63-[RKMapperOperation mapRepresentations:atKeyPath:usingMapping:]_block_invoke at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMapperOperation.m:214
#29 0x0330c5eb in __NSArrayEnumerate ()
#30 0x0330c196 in -[NSArray enumerateObjectsWithOptions:usingBlock:] ()
#31 0x0330c0a5 in -[NSArray enumerateObjectsUsingBlock:] ()
#32 0x002db48c in -[RKMapperOperation mapRepresentations:atKeyPath:usingMapping:] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMapperOperation.m:211
#33 0x002dd410 in -[RKMapperOperation mapRepresentationOrRepresentations:atKeyPath:usingMapping:] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMapperOperation.m:299
#34 0x002dde72 in -[RKMapperOperation mapSourceRepresentationWithMappingsDictionary:] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMapperOperation.m:347
#35 0x002de83b in -[RKMapperOperation main] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/ObjectMapping/RKMapperOperation.m:386
#36 0x02d6a829 in -[__NSOperationInternal _start:] ()
#37 0x02ce7558 in -[NSOperation start] ()
#38 0x003385b7 in __73-[RKManagedObjectResponseMapperOperation performMappingWithObject:error:]_block_invoke at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/Network/RKResponseMapperOperation.m:472
#39 0x01055fef in developerSubmittedBlockToNSManagedObjectContextPerform ()
#40 0x036aa4b0 in _dispatch_client_callout ()
#41 0x03697778 in _dispatch_barrier_sync_f_invoke ()
#42 0x03697422 in dispatch_barrier_sync_f ()
#43 0x01055f1f in -[NSManagedObjectContext performBlockAndWait:] ()
#44 0x00336da1 in -[RKManagedObjectResponseMapperOperation performMappingWithObject:error:] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/Network/RKResponseMapperOperation.m:427
#45 0x00334723 in -[RKResponseMapperOperation main] at /Users/mtford/Playground/xxx/xxx/Pods/RestKit/Code/Network/RKResponseMapperOperation.m:337
#46 0x02d6a829 in -[__NSOperationInternal _start:] ()
#47 0x02ce7558 in -[NSOperation start] ()
#48 0x02d6caf4 in __NSOQSchedule_f ()
#49 0x036aa4b0 in _dispatch_client_callout ()
#50 0x0369807f in _dispatch_queue_drain ()
#51 0x03697e7a in _dispatch_queue_invoke ()
#52 0x03698e1f in _dispatch_root_queue_drain ()
#53 0x03699137 in _dispatch_worker_thread2 ()
#54 0x039c2e72 in _pthread_wqthread ()

这是来自发生错误访问的主线程的堆栈跟踪:

#0  0x01005502 in _nameForEntityDescription () // Bad access here
#1  0x010054c7 in -[NSSQLCore entityForFetchRequest:] ()
#2  0x01005595 in -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] ()
#3  0x010604a4 in -[NSSQLCore newFetchedPKsForSourceID:andRelationship:] ()
#4  0x0105f7b6 in -[NSSQLCore newValueForRelationship:forObjectWithID:withContext:error:] ()
#5  0x0105f44e in -[NSPersistentStoreCoordinator(_NSInternalMethods) newValueForRelationship:forObjectWithID:withContext:error:] ()
#6  0x010d4e90 in __107-[NSManagedObjectContext(_NestedContextSupport) newValueForRelationship:forObjectWithID:withContext:error:]_block_invoke ()
#7  0x01056321 in internalBlockToNSManagedObjectContextPerform ()
#8  0x036aa4b0 in _dispatch_client_callout ()
#9  0x03697778 in _dispatch_barrier_sync_f_invoke ()
#10 0x03697422 in dispatch_barrier_sync_f ()
#11 0x010562a2 in _perform ()
#12 0x01056ebe in -[NSManagedObjectContext(_NestedContextSupport) newValueForRelationship:forObjectWithID:withContext:error:] ()
#13 0x010d4e90 in __107-[NSManagedObjectContext(_NestedContextSupport) newValueForRelationship:forObjectWithID:withContext:error:]_block_invoke ()
#14 0x01056321 in internalBlockToNSManagedObjectContextPerform ()
#15 0x03699440 in _dispatch_barrier_sync_f_slow_invoke ()
#16 0x036aa4b0 in _dispatch_client_callout ()
#17 0x0369875e in _dispatch_main_queue_callback_4CF ()
#18 0x03377a5e in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
#19 0x032b86bb in __CFRunLoopRun ()
#20 0x032b7ac3 in CFRunLoopRunSpecific ()
#21 0x032b78db in CFRunLoopRunInMode ()
#22 0x0413b9e2 in GSEventRunModal ()
#23 0x0413b809 in GSEventRun ()
#24 0x01b68d3b in UIApplicationMain ()
#25 0x0002a76d in main at /Users/mtford/Playground/xxx/xxx/xxx/main.m:18

我意识到我没有在映射+代码等方面提供太多上下文,但有没有人根据堆栈跟踪中涉及的符号有什么想法可以在这里找到问题?

干杯。

1 个答案:

答案 0 :(得分:0)

所以,事实证明我在某个时刻偶然发现了我的一段关系...这真是一场噩梦:)