これはかなり面白いです。私のアプリケーションでは、データベースに何千ものエントリを作成します (別のスレッドでは、MagicalRecord を使用しています)。すべてが正常に機能しているようです (バックグラウンド/フォアグラウンド/コンテキストの観点から)。
メインスレッドで「挿入したばかり」のデータをフェッチしようとすると、次の動作が見つかりました。
- (NSArray *) familiesInCompany:(Company *) company {
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"company == %@", company];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"company.name == %@", company.name];
NSArray *first = [Family MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate1];
NSArray *second = [Family MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate2];
NSArray *third = [Family MR_findByAttribute:@"company" withValue:company andOrderBy:@"name" ascending:YES];
return second;
}
今私が得るものは次のとおりです。
- 最初: 空の配列です
- 2 番目: 期待どおり、すべての
Family
オブジェクトが含まれます - 3 番目: 空の配列です。
SQL ステートメントをデバッグすると、次のようになります。
「最初の」ステートメント:
CoreData: 注釈: 合計フェッチ実行時間: 0 行で 0.0000 秒。
「2番目の」ステートメント」:
CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZNAME, t0.ZCOMPANY FROM ZFAMILY t0 JOIN ZCOMPANY t1 ON t0.ZCOMPANY = t1.Z_PK WHERE t1.ZNAME = ? t0.ZNAMEによるオーダー
CoreData: 注釈: SQL 接続フェッチ時間: 0.0005 秒
CoreData: 注釈: 合計フェッチ実行時間: 2 行で 0.0007 秒。
「3番目の」ステートメント:
CoreData: 注釈: 合計フェッチ実行時間: 0 行で 0.0000 秒。
面白いのは、アプリケーションを閉じて (実際には手動で終了するということです)、再び開くと、3 つの「フェッチ」ステートメントがすべて機能することです。
最初と 3 番目の fetch ステートメントが実行されていないように見えるのはなぜですか? 問題をどう掘り下げるか?