2017-02-15 46 views
3

我在生產應用程序中發現了一些奇怪的coredata錯誤,並且我能夠獲得崩潰報告。Coredata在提取時崩潰

及其在倍以下消息崩潰

***誤差對象0x17e400000:釋放未分配指針

***誤差對象0x17fd03730:被重新分配指針沒有被分配

這裏是堆棧跟蹤

Crashed: SQLQueue 0x13ff15250 for datastore.sqlite 
SIGABRT ABORT 0x0000000183986014 

0 libsystem_kernel.dylib __pthread_kill + 8 
1 libsystem_pthread.dylib pthread_kill + 112 
2 libsystem_c.dylib abort + 140 
3 libsystem_malloc.dylib _nano_vet_and_size_of_live + 330 
4 libsystem_malloc.dylib nano_free + 220 
5 libsqlite3.dylib sqlite3_finalize + 244 
6 CoreData -[NSSQLiteConnection _finalizeStatement] + 100 
7 CoreData -[NSSQLiteConnection releaseSQLStatement] + 52 
8 CoreData newFetchedRowsForFetchPlan_MT + 2420 
9 CoreData _executeFetchRequest + 72 
10 CoreData -[NSSQLFetchRequestContext executeRequestUsingConnection:] + 60 
11 CoreData __52-[NSSQLDefaultConnectionManager handleStoreRequest:]_block_invoke + 260 
12 libdispatch.dylib _dispatch_client_callout + 16 
13 libdispatch.dylib _dispatch_barrier_sync_f_invoke + 84 
14 CoreData -[NSSQLDefaultConnectionManager handleStoreRequest:] + 208 
15 CoreData -[NSSQLCoreDispatchManager routeStoreRequest:] + 288 
16 CoreData -[NSSQLCore dispatchRequest:withRetries:] + 200 
17 CoreData -[NSSQLCore processFetchRequest:inContext:] + 108 
18 CoreData -[NSSQLCore executeRequest:withContext:error:] + 504 
19 CoreData __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 4512 
20 CoreData -[NSPersistentStoreCoordinator _routeHeavyweightBlock:] + 276 
21 CoreData -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 408 
22 CoreData -[NSManagedObjectContext executeFetchRequest:error:] + 572 
23 CoreData -[NSManagedObjectContext(_NestedContextSupport) _parentObjectsForFetchRequest:inContext:error:] + 456 
24 CoreData __82-[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:]_block_invoke + 584 
25 CoreData internalBlockToNSManagedObjectContextPerform + 92 
26 libdispatch.dylib _dispatch_client_callout + 16 
27 libdispatch.dylib _dispatch_barrier_sync_f_invoke + 84 
28 CoreData _perform + 232 
29 CoreData -[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:] + 188 
30 CoreData -[NSManagedObjectContext executeFetchRequest:error:] + 572 
31 *MY_APP* NSManagedObject+MagicalRecord.m line 50__67+[NSManagedObject(MagicalRecord) MR_executeFetchRequest:inContext:]_block_invoke 

它確實發生在主線程上,我對如何調試這個問題感到困惑。看起來像一個內存問題,但。同時使用樂器時,它會在應用程序中顯示NSPrivateQueueConcurrencyType的某些泄漏。

尋找一些啓示它的見解。

應用程序廣泛使用MagicalRecord,這裏是導致上述崩潰的應用程序中的代碼塊。它只是從主線正常獲取。最有趣的是它隨機崩潰,即它不總是崩潰,但有時在執行Fetch時崩潰。

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"code == %@ and pid == %@", aCode,pid]; 
Permission *aPermission = [Permission MR_findFirstWithPredicate:filterPredicate]; 
+0

也粘貼一些代碼。 – kb920

+0

@Sj這可能幫助 - :http://stackoverflow.com/questions/15253966/getting-the-error-pointer-being-freed-was-not-allocated-set-a-breakpoint-in –

+0

如果你可以共享一些'fetchRequest'和'object updates'相關的代碼 – ystack

回答

0

睿最新managedObjectContext和managedObjects不是線程安全的 - 既不是寫作或閱讀。如果您違反此規則,核心日期可能隨時崩潰 - 不一定違規發生的地點/時間。因此,即使您在主線程中訪問爲主線程設計的上下文,如果您在應用程序中的其他位置執行了錯誤操作,它仍然可能會崩潰。

3

訪問(寫或讀)上比管理對象語境隊列導致不確定的行爲&其他任何線程管理對象的導致隨機怪異崩潰。
看起來您的Managed Object Context創建時使用NSPrivateQueueConcurrencyType &您在Main Queue上執行fetch。這是奇怪的崩潰的來源。
您可以初始化MOCNSMainQueueConcurrencyType或嵌套所有fetchRequests[MOC performBlock:{...}]

相關問題