問題タブ [nsfetchedresultscontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2592 参照

objective-c - Objective-C:NSFetchedResultsSectionInfoの[sectionInfo名]はdateFormattedである必要があります

私は次のコードを持っています:

基本的に、「2009-12-04 00:00:00 +1100」のような文字列の日付であるtitleforheaderinsectionを、見栄えの良い短い文字列に変換する必要があります。そこで、dateFormatter setDateStyleのようなものを使用して変換しようとしましたが、NSLogをコンソールに出力すると、次のようになります。

2009-12-22 09:42:10.156 app [94614:207] sectionName 2009-12-04 00:00:00 +1100 2009-12-22 09:42:10.157 app [94614:207] convDate(null

明らかに、convDateは何も取得していませんが、[sectionInfoname]は文字列である必要があります。それを独自のNSString変数に解析したのに、なぜdateFormatterを実装できないのですか?


もう少し情報:私は以前に日付を解析しました。コードスニペットは次のとおりです。

さて、これをデバッグすると、基本的に生の文字列は「Sat、27 Nov 2009 17:16:00 -800」ですが、convDateを見ると、「2009-11-2700:00:00+」になります。 1100」。理由はわかりませんが、いずれにせよ、それが保存されます。私が言及したスタイルと一致すると思っていたので、dateFormatter形式を他のタイプに変更すると、詰め込まれ、convDateがnilになります。

postControllerを振り返って:興味のあるスニペットがいくつかあります:

}

日付で並べ替え、コードのtitleForHeaderInSectionで、文字列の日付をより見やすくなるようにフォーマットしたいと考えています。

みんなありがとう

0 投票する
9 に答える
83980 参照

objective-c - NSPredicate: NSDate プロパティの日によるオブジェクトのフィルタリング

プロパティを持つ Core Data モデルがありNSDateます。データベースを日ごとにフィルタリングしたい。解決策には が含まれるとNSPredicate思いますが、すべてをまとめる方法がわかりません。

NSDateと を使用して 2 つの のNSDateComponents日を比較する方法は知ってNSCalendarいますが、それを ? でフィルタリングするにはどうすればよいNSPredicateですか?

おそらくNSManagedObject、年、月、日だけで単純な日付を返すことができるカテゴリをサブクラスに作成する必要があります。次に、それを で比較できNSPredicateます。これはあなたの推奨事項ですか、それとももっと簡単なものはありますか?

0 投票する
5 に答える
6025 参照

iphone - NSFetchedResultsController が UITableView のセクション インデックスを更新しない

セクション ヘッダーとセクション インデックスを設定するセクションを作成する結果を使用して、NSFetchedResultsController を使用して UITableViewController を設定しています。次の方法を使用して、セクション インデックスを設定しています。

そして今、私は問題に遭遇しました。NSFetchedResultsController に関連付けられた NSManagedObjectContext に新しい要素を追加すると、新しい要素が保存され、UITableView のセルとして適切に表示されます... 1 つのことを除いて。新しい要素が新しいセクションを作成する場合、UINavigationController のスタックをポップして UITableViewController をリロードしない限り、新しいセクション インデックスは右側の余白に表示されません。

私はNSFetchedResultsControllerDelegateのインターフェースに準拠し、手動で呼び出します

これら両方のデリゲート メソッドの最後に:

メソッドの実行をデバッグしてトレースし、リロード呼び出しが呼び出されたことを確認できますが、UITableView のセクション インデックスにはセクションの変更が反映されません。

ここでも、データが表示されます。新しいセクションは UITableView で物理的に表示 (または削除) されますが、セクション インデックスは更新されません。

何か不足していますか?

0 投票する
2 に答える
6419 参照

iphone - tableViewの行を削除するときのコアデータエラー

グループ化されたtableViewを管理するUITableViewControllerがあります。tableViewは、fetchedResultsControllerから入力されます。

ナビゲーションバーの[編集]ボタンをクリックしてから行を選択し、[削除]ボタンをクリックすると、行が削除され、すべてが正常に終了します。

ただし、スワイプして[削除]ボタンを続けて表示し、[削除]ボタンをクリックすると、アプリがクラッシュして次のエラーが発生します。

2010-01-06 15:25:18.720 Take10 [14415:20b]重大なアプリケーションエラー。Core Data変更処理中に例外がキャッチされました:-[NSCFArray objectAtIndex:]:インデックス(1)が範囲を超えています(1)with userInfo(null)

2010-01-06 15:25:18.721 Take10 [14415:20b]キャッチされなかった例外「NSRangeException」が原因でアプリを終了しています。理由:「***-[NSCFArrayobjectAtIndex:]:インデックス(1)が境界を超えています(1)」

もちろん、エラーのインデックス番号は、行を削除しようとしているセクションの行数に応じて変化し、その数は、削除しようとした後のテーブルセクションの残りの行数よりも1つ多くなります。

これは、fetchedResultsControllerからデータを削除しようとするコードです。同じ方法で両方のシナリオに対応できるため、スワイプするとクラッシュする理由がわかりません。

何か案は???

ありがとう

Jk

0 投票する
2 に答える
667 参照

iphone - NSFetchedResultsControllerを使用して、iPhonePhotoアプリのようなUITableViewでのデータ管理をサポートする方法

私はiPhone開発の初心者です。コアデータをバックストアとして使用し、UITableViewに複数のデータエンティティを表示します。各データエンティティはプレビューサムネイルとして表示され、1つのテーブルビューセルは1〜4個のサムネイルを保持します。つまり、iPhone Photoのように、3つのテーブルセルに最大12個のデータエンティティが表示される可能性があります。

また、テーブルビューセル全体ではなく、各プレビューサムネイルを直接操作する必要があります。

1つのテーブルセルに1つのデータエンティティを表示する場合、NSFetchedResultsControllerは完璧です。しかし、私のシナリオでは、NSFetchedResultsControllerのインデックスパスがテーブルビューのインデックスパスと一致していません。この場合にNSFetchedResultsControllerを使用するための良い習慣を教えてください。この実装をサポートするには、テーブルビューを使用する必要がありますか?

0 投票する
1 に答える
363 参照

iphone - マップ注釈用の NSFetchedResultsController

NSFetchedResultsController のドキュメントには、「Core Data fetch リクエストから返された結果を効率的に管理して、UITableView オブジェクトにデータを提供する」ために使用することを意図していると記載されています。

NSFetchedResultsController を使用して、マップ注釈のコレクションも管理できますか? どうやってこれを行うのかわかりません。何か案は?

0 投票する
4 に答える
331 参照

iphone - 同じ行の2番目の選択でアプリケーションがクラッシュする

作業中のiPhoneコアデータアプリケーションで問題が発生しました。オブジェクトを一覧表示するテーブルがあります。これらのオブジェクトの1つを選択すると、オブジェクトの詳細を表示する新しいViewControllerに移動します。

詳細ビューには、メインリストビューに戻るための戻るボタンがあります。

行はいくつでも選択でき、それぞれの詳細ビューが表示されます。ただし、すでに選択した行を選択しようとすると、次のようにクラッシュします。

プログラム受信信号:「EXC_BAD_ACCESS」。

いくつかのブレークポイントを追加してこれを追跡しようとしましたが、tableViewcellForRowAtIndexPathメソッドで次のようになりました...

MyEntity * thingsamy = [fetchedResultsController objectAtIndexPath:indexPath]を実行すると、オブジェクトごとに最初に通過します。thingamyは有効であり、有効なthingamyに設定されます。gdbでは、この時点でブレークポイントを設定して、

pothingamyと私は期待される出力を取得します。

ただし、2回目に特定の行を選択した場合(たとえば、行0を選択して戻り、行0を再度選択した場合)、thingamyが正しく設定されていません。

他の行はいくつでも表示できますが、行を選択しようとするとすぐに、その詳細が表示されます。

ブレークポイントを設定していて、それを設定した後でpothingamyを実行しようとすると、次のようになります。

プログラム受信信号EXC_BAD_ACCESS、メモリにアクセスできませんでした。理由:アドレスでのKERN_PROTECTION_FAILURE:objc_msgSend()の0x000000200x92ca3ed7

fetchedResultsControllerが最初の呼び出しで有効なオブジェクトを返すが、2番目の呼び出しでは返さない理由はありますか?

アップデート

数日後、fetchedResultsControllerが割り当て解除されることに問題はないことを確信しています。NSZombieEnabledモードを有効にしましたが、何もありません。

さらに、既にアクセスしたオブジェクトだけでなく、fetchedREsultsControllerから他のオブジェクトを取得できます。

たとえば、[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]を取得して、次のビューに表示できます。

戻って親ビューに戻ると、indexPathForRow:0 inSection:1でオブジェクトを取得し、それを表示できます。

もう一度最初に戻って、indexPathForRow:0 inSection:0を取得しようとすると、EXC_BAD_ACCESSでクラッシュします。

100行のテーブルでは、すべての行を1回取得できますが、同じ行を2回取得しようとすると、次々に試行してもクラッシュします。

0 投票する
4 に答える
19052 参照

iphone - Core Data NSFetchedResultsController - 返されたレコードの総数

iPhone アプリで NSFetchedResultsController を使用していますが、すべてのセクションで返される行の総数を取得する簡単な方法があるかどうか疑問に思っています。

[[fetchedResultsController セクション] カウント] を取得し、各セクションをループしてそのカウントを取得する代わりに、1 行で実行できますか?

ありがとう!

0 投票する
1 に答える
1577 参照

iphone - NSFetchedResultsController がセクション タイトルを正しくロードしないのはなぜですか?

UITableViewController とともに NSFetchedResultsController を使用しています。

UITableView セクションのラベルとして使用する Core Data モデルに一時フィールドを作成しました。フィールドの名前は「sectionIndex」です。私のアプリケーションでは、「クライアント」エンティティには多くの「ジョブ」(1 対多数) があります。そのため、ジョブを取得するクエリは、関連付けられた「クライアント」の名前で (セクションを介して) それらをグループ化します。

このメソッドは、'Job' エンティティのカテゴリとしてコード ベースに実装しました。

文字列「sectionIndex」は、NSFetchedResultsController の init メソッドに sectionNameKeyPath 引数として渡されます。

シミュレーターからアプリを消去すると、アプリケーションの初回実行時に、Jobs のフロント ページが正しく取得され、ここにリストされている sectionIndex メソッドごとに Job の Client.name によってグループ化されます。ログを見ると、文字通り、この sectionIndex メソッドが複数回呼び出されていることがわかります。

ただし、アプリケーションの後続の実行では sectionIndex メソッドは呼び出されません ... それでも、セクション ラベルは前回の実行の値で表示されます。それはどのように起こっていますか?実行間で魔法のキャッシュが行われていますか?

その行動は、より大きな問題につながります。UITableView を見ているときに、わずかに異なる述語を使用して NSFetchedResultsController を解放して割り当てると、結果セットが同じサイズである場合、...すべての新しい結果に対して同じ元のセクション名が表示されます!

もちろん、新しいログ エントリはありません。これは、列が検索されないことを意味します。これは、コードが一時フィールドを呼び出したり検索したりしないことを意味します。それらのフィールドに障害がないかのようです。

これで、代替クエリが異なる数の結果を返す場合、セクション名がロードされます。IE: その場合、ログには、バー ボタンを押すたびに、'sectionIndex' メソッドが呼び出され、対応するラベルが UITableView に表示されます。

これはクレイジーです。2 つの「アクティブな」ジョブと 2 つの「非アクティブな」ジョブがあり、バー ボタンを使用して対応するクエリを前後に切り替えている場合、最初のクエリに関連付けられたセクション ラベルがすべて表示されます。後続のテーブル ビュー。

結果セット内の結果の数が異なる場合、sectionNameKeyPath フィールドは FetchedResultsController によってのみ呼び出されるようです。実際の結果は異なります-ジョブ名は実際の行に正しく表示されます-しかし、セクションラベルが正しくないか、NSFetchedResultsControllerにセクションラベルを正しく要求しているとは思いません。私は以下を使用しています:

ここで、results_ は、クエリごとに再構築している NSFetchedResultsController です。

何か不足していますか?その Core Data キャッシュを手動でクリアして、スマートになるのをやめ、すべてのクエリで確実に sectionNameKeyPath を検索する方法はありますか?

その価値のために、xcdatamodel のフィールドの「一時的」オプションのチェックを外しましたが、同じ結果が得られました。

これによる最後の例外の 1 つは、最初のジョブを非アクティブ (デフォルトのスタートアップ ビューではない) として作成すると、アクティブ ジョブも作成すると、非アクティブ セクション ラベルが両方に貼り付けられることです。さらに、アプリケーションをシャットダウンして最初からやり直すと、Inactive セクションのラベルがまだ表示されます --- タイトル画面で、まったく別のラベルを表示しているはずの Active Job を表示しているにもかかわらず。

これはコアデータの問題だと思わざるを得ません。アプリケーションを再起動するとデータが返されるというのは意味がありません。

0 投票する
1 に答える
200 参照

sql - コア データ: NSFetchedResultsController でフェッチされたオブジェクトに追加のコンテキストを通信しますか?

ドキュメントに記載されている方法で、 NSFetchedResultsControllerをほとんどそのまま使用しています。これが私のコードの抜粋です。

次の 2 つの点に注意してください。

1) 述語。私のデータ モデルでは、SomeEntity とバケットは多対多の関係にあります。述語は、「関連するバケット オブジェクトがこの名前を持つすべての SomeEntity オブジェクトを返す」ことを示しています。期待どおりに動作します。

2) sectionNameKeyPath を使用しています。これは、実際にはモデル オブジェクト内のメソッドであり、アプリ ロジックに従って何らかの計算を行い、タイトルを返します。期待どおりに動作します。

さて、質問:

これら 2 つのことを結び付けて、"titleAccessor" メソッドに述語を認識させるにはどうすればよいですか? 述語に応じてセクションのタイトルを変えたいと思います(正確には、述語で使用しているbucketIdに応じて)。明確にするために:

現在、titleAccessor は次のように機能します。

私はそれを機能させたい:

私には 2 つの考えがあります。1) これが通常の CD フェッチである場合 (そのようなものがある場合)、モデル オブジェクトの揮発性プロパティを設定して、それを使用することができます。しかし、NSFetchedResultsController 結果オブジェクトにアクセスできません。2) これが SQL の場合、「何とか a、b、c を「何か」として選択」のようなことをします。実行時に、「c」が目的の値になり、それをプロパティとして使用できます。しかし、これは SQL ではありません。:)

上記の目的の動作を実現するにはどうすればよいですか?

更新

もちろん、質問を投稿した直後に自分で答えを見つけます。(投稿は治療の一部だと思います。)ドキュメントにあるように、tableviewcontrollerデリゲートに次のものを入れたことに気付きました:

ここで必要なマングリングを行うことができました。それが最善のアプローチですか?「はい」と言って、いくつかの簡単なポイントを作ります。:) (またはさらに良いアプローチを提案します。)