2016-03-25 16 views
3

デバッグが非常に困難である断続的なバグが発生しています。コアデータフェッチでEXC_BAD_ACCESS(コード= 1、アドレス= 0x10)

私は

EXC_BAD_ACCESS(コード= 1、アドレスは= 0x10の)コアデータに

class func getAll(context: NSManagedObjectContext) -> [Tag] { 
    var returnValue: [Tag] = [] 
    do { 
     let fetchRequest = NSFetchRequest(entityName: Tag.entityName()) 
     returnValue = try context.executeFetchRequest(fetchRequest) as! [Tag] 
    } catch { 
    } 
    return returnValue 
} 

バグを取得し、以下の方法から、次のエラーを取得していますが、extermely断続的です数100セッションごとにしか起こらないが、私はそれに対処する必要があるほど頻繁に出現している。行のコードブレークはreturnvalue = try context.execute...デバッグから

  • 、私のfetchRequestnil
  • ではありません、私のcontextではありませんnil
  • のreturnValueは
  • 私backgroundContextが実行されている空の配列のデフォルト値を持っていますバックグラウンドスレッド

NSZombieFlagをオンにして、いくらかのメモリが解放されていないかどうかを確認しようとしましたここにアクセスしていますが、私はこれを引き起こしているのが困っています。どんなアイデアや洞察も大変ありがとうございます。

+0

あなたは正しい方向にあなたを導く可能性がある、エラーをプリントアウトする必要があります。これをして、あなたの質問にエラーメッセージを入れてもいいですか?また、間違いかもしれませんが、NSFetchRequestではNSSortDescriptorを提供する必要があります。 – Jonathan

+0

catchブロックに到達することはありません。到達した場合、クラッシュは発生しません。私はcatchブロックにエラーステートメントを追加しましたが、まだ到達しません。キャッチブロックには、不正なアクセスエラーではなく、コアデータフェッチエラーを防ぐためのブロックがあります。 – Unome

+0

ソート記述子が必要です。それは間違いない。 Appleのドキュメントでは、「nilの値はソート記述子として扱われません」ということは、あなたがそれを提供しないときのデフォルト値です。 – Unome

答えて

3

ほとんどすべてコアデータで見たEXC_BAD_ACCESSの問題は、新しいキュー同時実行モデルの代わりにスレッドの並行性を使用しようとしたことが原因です。

管理対象オブジェクトのコンテキストにアクセスするには、iOS 5以降でperformBlockまたはperformBlockAndWaitを使用する必要があります。 catch文で

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Concurrency.html

+0

合意。コアデータとマルチスレッドは完全な痛みになる可能性があります。 –

+0

私はコアデータとマルチスレッドを使用する以外に選択肢はありません。私は次の構文を使用しています。 privateContext.performBlock {} – Unome

関連する問題