2011-07-25 15 views
2

の私のアプリは、データを保存するコア上でクラッシュを受け取ります。スタックは次のとおりです。コアデータEXC_BAD_ACCESSは、ランダムに保存

#0 0x01646725 in _PFObjectIDFastEquals64() 
#1 0x018aba17 in __CFDictionaryEquateKeys() 
#2 0x018f0967 in ___CFBasicHashFindBucket_Linear() 
#3 0x017fb9ab in CFBasicHashSetValue() 
#4 0x017fb799 in CFDictionarySetValue() 
#5 0x0163cab3 in _PFCMT_SetValue() 
#6 0x01668d68 in -[NSManagedObjectContext(_NSInternalAdditions) _changeIDsForManagedObjects:toIDs:]() 
#7 0x0167aaff in -[NSSQLCore commitChanges:]() 
#8 0x0166e070 in -[NSSQLCore saveChanges:]() 
#9 0x0162c199 in -[NSSQLCore executeRequest:withContext:error:]() 
#10 0x016dc70b in -[NSPersistentStoreCoordinator executeRequest:withContext:error:]() 
#11 0x01664948 in -[NSManagedObjectContext save:]() 
#12 0x000c8ee4 in -[SensorController performDataRecord] (self=0x69633d0, _cmd=0x27eaa4) at SensorController.m:760 
#13 0x01d7cefc in -[NSObject(NSThreadPerformAdditions) performSelector:onThread:withObject:waitUntilDone:modes:]() 
#14 0x01d8f506 in -[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:]() 
#15 0x000c8d60 in -[SensorController recordData] (self=0x69633d0, _cmd=0x27eab6) at SensorController.m:744 
#16 0x01d94749 in __NSFireTimer() 
#17 0x018ba8c3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__() 
#18 0x018bbe74 in __CFRunLoopDoTimer() 
#19 0x018182c9 in __CFRunLoopRun() 
#20 0x01817840 in CFRunLoopRunSpecific() 
#21 0x01817761 in CFRunLoopRunInMode() 
#22 0x027cc1c4 in GSEventRunModal() 
#23 0x027cc289 in GSEventRun() 
#24 0x007b6c93 in UIApplicationMain() 
#25 0x00083801 in main (argc=1, argv=0xbffff60c) at main.m:50 

データは、非メインスレッドコンテキストを使用してスレッドに挿入されます。これはまれにしか発生しませんが、長時間使用しても頻繁に頻繁にクラッシュするほどです。スタックから見ることができるように、私はメインスレッドで保存を実行し、完了するのを待っています。

また、単なる予防策として、私は、保存前にコンテキストを探しています。

最後に、コンテキストは、オブジェクトを保持するように設定されている: [context setRetainsRegisteredObjects:YES];

任意の助けを大幅に高く評価されるだろう。

答えて

2

に行くにはあまりいますが、オブジェクトは上の更新/挿入されたのと同じスレッド上で保存する必要があります。

ストアはオブジェクトIDを変更しようとしているときにクラッシュが発生しているように見えます。つまり、同じストア表現にキーを設定した2つ以上のインスタンス化オブジェクトがあると考えられます。私の経験で

0

、EXC_BAD_ACCESSは常に放出されたかdealloc'dされている変数に触れしようとしてから来ています。メモリリークがないか、それが爆発している領域がすべてを占めているかどうかを調べてみてください。

関連する問題