私のアプリには、iphoneを開くNSOperationがありますアドレス帳は、ユーザーの連絡先をループし、名前と電話番号をCore Dataエンティティにコピーします。ほとんどの場合、これは問題なく動作しますが、アドレス帳が破損し、すべての連絡先が失われているようです。アドレス帳はどうしてこのようなことが起こるかわからない。スタックトレースを投げたり、アプリをクラッシュさせたりすることはありません。
CPSqliteStatementSendResults: ファイルが暗号化されているか、データベースではありません checkResultWithStatement:ファイルが暗号化されているか、またはSELECT UID、識別子、(SELECT値FROM ABMultiValueLabel WHERE ROWID =ラベル)、ABMultiValue WHERE record_id WHERE値のデータベースではありません。 ANDプロパティ+ 0 =?
...そしてアドレス帳は空です。
アドレス帳を読み込んだり、正しく閉じたりしないで、アドレス帳をゴミ箱に入れることは可能ですか?
回答:
回答№1の場合は3この正確なことは私に以前起こった。
2つの異なるスレッドから同じABインスタンスにアクセスしており、アドレス帳はスレッドセーフではありません。
ABAddressBookCreate()を使用して、個々のスレッドごとに使用するインスタンスを取得することにしました。
ドキュメントから: Important: Instances of ABAddressBookRef cannot be used by multiple threads. Each thread must make its own instance.
あなたはそれについてもっと読むことができます ここに.
私はあなたが複数のスレッドから読むと、データベースが破損し、ユーザーがすべての連絡先を失うことを確認しました。