私はすでに数時間を費やしており、解決策を見つけることができません。コアデータの不一致 - 取得時に何も返さない場合があります。
- コアデータ
- コアデータを自動保存がUIManagedDocumentからManagedContextが格納されている
- になったUIManagedDocumentから初期化されるとのObjective-CのiOS 6アプリを:私が持っていないものを第一に、いくつかの仕様静的変数に入れて、アプリケーション全体で再利用
- このアプリはRestKitを使用しています。私はそれが提供するActiveRecordカテゴリを利用しています。
チームエンティティのモデルがあります。このアプリには、バックエンドからチームをロードするチームリストビューコントローラがあります。バックエンドは、とりわけチームIDを含むJSON配列を返します。モデルのIDフィールドにこのIDを格納し、サーバレスポンスを反復しながら、指定されたIDのチームがすでに存在するかどうか調べます。もしそうであれば、私はその情報を更新し、オブジェクトを渡します。もしそうでなければ、最初に作成します。
これは奇妙に変わるところです。これは90%の時間で動作します。私はチームリストコントローラを読み込んで、アプリケーションにさらに進んで、コントローラに戻って(データを再度ロードする)、大部分は大丈夫です。しかし、しばらくの間、私のフェッチ要求は何も返しません。次のように:
NSArray *results = [context executeFetchRequest:request error:&error];
は空の配列を返し、エラーも空です。サーバー上の何も変化していません。私はそれをデバッグしようとする要求は、次のようになります。私は、外部アプリでのsqliteストアをプレビューすると、私はこのIDのためにチームの項目が存在していることがわかります
<NSFetchRequest: 0x127a0e20> (entity: Team; predicate: (id == "123"); sortDescriptors: ((null)); limit: 1; type: NSManagedObjectResultType;)
、およびその他の90%でそれが実際にロードされる時間。
2013-04-12 12:00:27.934 SportLink[10831:c07] CoreData: annotation: fetch using
NSSQLiteStatement <0x12656d10> on entity 'Team' with sql text 'SELECT 0, t0.Z_PK,
t0.Z_OPT, t0.ZACI1, t0.ZACI2, t0.ZACI3, t0.ZALTFIRSTNAME, t0.ZALTSECONDNAME, t0.ZCOLOR1,
t0.ZCOLOR2, t0.ZGENDER, t0.ZICON, t0.ZID, t0.ZLOCATION, t0.ZLOGO1, t0.ZLOGO2, t0.ZNAME,
t0.ZTYPE, t0.ZSPORT FROM ZTEAM t0 WHERE t0.ZID = ? LIMIT 133' returned 6 rows
バッキングストアが実際にデータをフェッチしますが、何らかの理由でそれに沿って通過しなかったことを意味している:私は私が見ることができる上SQLDEBUGになってきたとき、さらに奇妙なものです。今:
-
私はメインスレッドですべてをやっている
- ので、これはこれでも起こることができるので、私はアプリを閉じて、それを開いたとき、私は自動保存も問題ではないと信じている問題
- ではありませんデータはすでに存在しています。
ここで何が起こっているのですか?
編集:Instrumentsでアプリのプロファイルを作成しました。私はちょうど問題のあるVCに入ってから、その子コントローラに入り、葉っぱをして、問題が現れ始めるまでこれを数回繰り返しました。ここに結果があります。多分ここから何が起こっているのか知ることが容易になります。
「TeamListVC」でリクエストを発砲するのはいつですか?結果が読み込まれたら何をしていますか?あなたはもう少しトレースするよう要求した後、さらに '[results count]'を記録することができます。 – flashfabrixx
メインコンテキストのstalenessIntervalを0に設定してみてください –
@ DanShelly残念ながら、これは役に立ちませんでした。 – mav