問題タブ [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.
iphone - NSFetchedResultsControllertitleForHeaderInSectionとフォーマットされたNSDate
Core Dataアプリでは、FetchedResultsControllerを使用しています。通常、UITableViewでヘッダーのタイトルを設定するには、次のようなメソッドを実装します。
ここで、[sectionInfoname]はNSStringを返します。
私のsectionKeyPathはNSDateに基づいており、これは、セクションヘッダーを除いてすべて正常に機能します。これは、生の日付記述文字列(たとえば、12/12/2009 12:32:32 +0100)であり、ヘッダ!
したがって、これに日付フォーマッターを使用して「2010年4月17日」のような素敵なヘッダーを作成したいのですが、これはNSStringであるため、[sectionInfoname]では実行できません。何か案は?
どうもありがとう
objective-c - NSFetchedResultsController の結果をユーザーの場所で並べ替える
Core Data にいくつかの場所を含むアプリケーションがあり、ユーザーの場所に近い順にそれらをユーザーに表示したいと考えています。NSFetchedResultsController を使用して、場所をテーブル ビューに提供しています。「グローバル」CoreLocationManagerを使用して計算される、ユーザーからの場所の距離を返す仮想アクセサーメソッドを作成することを考えましたが、理由でクラッシュします:
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'keypath distanceFromCurrentLocation がエンティティ < NSSQLEntity Location id=4> に見つかりません'
また、アルファベット順にソートするオプションをユーザーに提供するので、可能であれば、NSFetchedResultsController を保持することをお勧めします。
どうすればいいですか?
ありがとう!
iphone - NSFetchedResultsControllerとの多対多の関係を処理するにはどうすればよいですか?
OK、データモデルに2つのエンティティ(たとえば、entityAとentityB)があり、これらのエンティティは両方とも相互に多対多の関係にあります。
一連のentityAをフェッチするようにNSFetchedResultsControllerを設定しました。ここで、テーブルビューのセクション名をentityBのタイトルにしようとしています。
これにより問題が発生します。その関係から返されるセクション名は、関係するさまざまなentityBの数に応じて、明らかに({title1})または({title1、title2 ... titleN})のように見えます。これはテーブルビューでは見栄えが悪く、私が望むようにオブジェクトをグループ化しません。
私が欲しいのは、entityBのタイトルごとのセクションで、entityAは各セクションの下に、必要に応じて複数のセクションの下に表示されます。エンティティを複数回表示するために述語を更新する必要があるのか、コントローラーがループするときに何らかの処理を行うためにセクション関数とヘッダー関数を更新する必要があるのか、これをどのように達成するのか迷っています。オブジェクト。
どんな助けでも大歓迎です:)
ありがとう
iphone - NSFetchedResultsController が performFetch でクラッシュする: キャッシュを使用している場合
NSFetchedResultsController を使用して、日付を使用してセクション化された一連のオブジェクトを表示します。新規インストールでは、すべてが完全に機能し、オブジェクトがテーブル ビューに表示されます。ただし、アプリを再起動するとクラッシュするようです。NSFetchedResultsController を初期化するときにキャッシュを指定し、そうしないと完全に機能します。
NSFetchedResultsController を作成する方法は次のとおりです。
アプリがクラッシュしたときに表示されるメッセージは次のとおりです。
私はこれを引き起こすような特別なことをしているとは思わないので、なぜそれがそう言っているのかについては本当に手がかりがありません. 唯一の潜在的な問題は、新しいオブジェクトを作成するときに次のように作成するセクション ヘッダー (日) です。
前述したように、キャッシュが含まれていなければ、これはすべて正常に機能します。どんな助けでも大歓迎です!
iphone - NSFetchedResultsControllerはデータを返しませんでした
私はいくつかの問題で立ち往生し、2日間探した後、解決策を見つけましたが、なぜそれが機能するのかわかりませんでした。
まず、次のコードを使用してNSFetchedResultsControllerを初期化します(多くの自動生成されたように見えます)。
}
コメントされた文字列を見てください-これらの文字列はありませんでした、そして私がデータを要求したとき-私は何も得られませんでした(そしてそれはそこにありました!)。その行のコメントを外すと、動作を開始します。明らかなようですが、私が以前に見たすべての例はその線ではありませんでした。そして、彼らは働きます。どうしてそれができますか?何が間違っているのか知りたいだけです。
core-data - ViewController間でデータを渡すことと、各VCでローカルフェッチを実行すること
私はCoreDataを使用してiPhoneアプリを開発しており、ViewController間でデータを渡すのが許容できるのか、各ViewControllerに移動するときにローカルフェッチを実行するのが許容できるのかについて、一般的なアドバイスと推奨事項を探しています。通常、それはすべてさまざまな要因(パフォーマンスなど)に依存すると思いますが、データの受け渡しアプローチは私のアプリで非常に普及しており、標準のガイドラインに準拠していないためにAppleがアプリを拒否するというすべての話に驚いています。
別の言い方をすれば、VC間でデータを渡すことは非標準ですか?
私がデータを大量に渡す理由は、各ViewControllerがオブジェクトモデル/グラフに存在するデータに対する単なる別のビューであるためです。最初のViewControllerで最初のオブジェクトのハンドルを取得したら(もちろんフェッチする必要があります)、既存のオブジェクト構成/関係を使用して、データの次のレベルの詳細にドリルダウンできるので、パスします。これらのオブジェクトは次のVCに送られます。
これとは別に、このVCへのデータの受け渡しアプローチの1つの考えられる欠点は、効率的なメモリ使用量とセクション処理の観点から、NSFetchedResultsControllerが提供する最適化/利点(私が認識しているもの)の恩恵を受けられないことです。私のアプリは読み取り専用ですが、5000行のテーブルが1つあり、NSFetchedResultsControllerの利点を逃していないかどうか知りたいです。これについても何か考えはありますか?(以前のVCからのデータを既に渡したので)完全なフェッチを実行しなくても、どういうわけかNSFetchedResultsControllerの良さから利益を得ることができますか?
どうもありがとう。
iphone - NSFetchedResultsController セクションのローカライズされたソート
翻訳されたソートキーと sectionKeyPath で NSFetchedResultsController を使用するにはどうすればよいですか?
問題: typeA、typeB、typeC などのデータベースのプロパティ「type」に ID がありますが、ローカライズする必要があるため、直接値ではありません。英語では typeA=Bird、typeB=Cat、typeC=Dog ドイツ語では Vogel、Katze、Hund となります。
「タイプ」にソートキーとsectionKeyPathを持つNSFetchedResultControllerを使用すると、注文とセクションを受け取ります-typeA-typeB-typeC
次に表示用に翻訳すると、すべて英語で問題ありません: - 鳥 - 猫 - 犬
ドイツ語に切り替えると、間違った並べ替え順序が表示されます - Vogel - Katze - Hund
まだtypeA、typeB、typeCでソートされているため
そこで、NSFetchedResultsController の並べ替えをローカライズする方法を探しています。
一時的なプロパティ アプローチを試しましたが、ソート キーはエンティティ内にある必要があるため、ソート キーでは機能しません。
他に思いつきません。しかし、ローカリゼーションに必要な派生属性で NSFetchedResultsController を使用できないとは信じられませんか?
NSFetchedResultsController でカスタム セクションを使用するなどの関連する議論がありますか? ただし、カスタム セクション名とソート キーの順序がおそらく同じであるという違いがあります。私の場合ではなく、これが主な違いです。
最後に、派生属性で必要な NSSortDescriptor の並べ替え順序が必要になると思います。このソート順は、sectionKeyPath にも使用する必要があります。
ヒントをありがとう。
cocoa - setIncludesSubentities:NSFetchRequestで、複数の永続ストアにまたがるエンティティに対して壊れています
これに完全に対処していない先行技術: コアデータ移行エラーメッセージ「'モデルに構成'XYZ'が含まれていません。」
これを特定の問題に絞り込みました。ただし、セットアップには1分かかります。我慢してください。
問題の要点は、persistentStoreCoordinatorが(明らかに)管理対象オブジェクトが別のファイルに保存されているときに別のサブエンティティとしてマークされているオブジェクトグラフの部分を保持できないことです。ここに行く...
1)2つのxcdatamodelファイルがあり、それぞれに1つのエンティティが含まれています。実行時に、管理対象オブジェクトモデルが構築されるときに、setSubentities:を使用して、あるエンティティを別のエンティティのサブエンティティとして手動で定義します。これは、エディターで複数のファイルにまたがるサブエンティティーの定義がまだサポートされていないためです。次に、modelByMergingModelsを使用して完全なモデルを返します。
2)エンティティごとに異なるストアを設定するようにpersistentStoreCoordinatorメソッドを変更しました。技術的には、構成を使用し、各エンティティには1つだけの構成が定義されています。
3)親エンティティにfetchRequestを設定し、setIncludesSubentities:とsetAffectedStores:を使用して、1)と2)の両方がカバーされていることを確認します。いずれかのエンティティのオブジェクトを挿入すると、両方がコンテキストに追加され、両方ともfetchedResultsControllerによってフェッチされ、期待どおりにtableViewに表示されます。
ここで誤動作が始まります。アプリを閉じて再起動すると、親エンティティのみが取得されます。
setEntity:を使用してリクエストのエンティティを「Note」のエンティティに変更すると、すべてのノートがフェッチされます。'Browser'のエンティティに変更すると、すべてのブラウザがフェッチされます。オブジェクトが最初にコンテキストに挿入される実行中に、オブジェクトがリストに表示されることを繰り返します。フェッチ要求が階層をトラバースできないのは、保存して再起動した後だけです。
したがって、問題は継承のストレージであると結論付けることしかできません。理由を要約しましょう:
- -両方のエンティティを作成し、コンテキストに挿入して表示できるため、モデルは機能しています
- -両方のエンティティを1回のリクエストでフェッチできるため、継承が機能しています
- -ファイルが個別に保存され、オブジェクトが適切なストアに格納されていることを確認できるため、保存が機能しています
- -リクエストにいずれかのエンティティが設定された状態でアプリを起動すると機能するため、ストアからの取得が機能します
- -これは、リクエストでさまざまなストアをトラバースすることも機能していることを意味します
- -複数ではなく単一のストアを使用することで、問題が完全に解消されるため、作成、保存、フェッチ、表示などが正しく機能します。
これにより、(私の考えでは)1つの原因のみが残ります。setSubentitiesで設定している継承:は、セッション中に作成されたオブジェクトに対してのみ有効です。
オブジェクト/エンティティが継承情報を取り除いて保存されているか、プログラムで定義されたエンティティの継承が新しいインスタンスにのみ適用されるか、またはその両方です。これらのいずれも受け入れられません。それはバグであるか、私は道を外れています。
私は2日間、あらゆる方法でこれに取り組んできました。どんな洞察も大歓迎です。現在の回避策(単一のストアを使用するだけ)は完全に機能しますが、アプリからモデルの1つを削除した場合など、将来にわたって利用できるわけではありません。また、理由がわからないため、頭がおかしくなります。 (setSubentities :)のコア定義で機能しない場合は、複数のストアにまたがって保存し、影響を受けるストアをフェッチ要求に設定するためのこのすべてのインフラストラクチャがあります。
iphone - uisearchbar + uitableview + nsfetchedresultscontroller
NSFetchedResultsController によって入力される UITableView を持つビュー コントローラーがあります。UISearchBar を追加して、NSFetchedResultsController を介して UITableView に表示される Core Data からレコードをフィルタリングできるようにしたいと思います。
これを行うための「最もクリーンな」方法と、これの明確な例が見つかるかどうかを知りたいです。
iphone - NSFetchedResultsController: 更新中に NSManagedObjectContext を使用するとクラッシュする
これが私のコントローラークラスのインターフェースです:
次のコードを使用してfetchedResultsControllerを初期化します。
ご覧のとおり、コントローラー クラスで定義されているのと同じmanagedObjectContextを使用しています。
以下は、NSFetchedResultsControllerDelegate プロトコルの採用です。
_configureCell:atIndexPath: メソッドの内部には、次のコードがあります。
managedObjectContext を再び使用しています。
しかし、新しいプロジェクトを挿入しようとすると、次の例外でアプリがクラッシュします:
-[UITableView _endCellAnimationsWithContext:]、/SourceCache/UIKit_Sim/UIKit-984.38/UITableView.m:774 でのアサーションの失敗、キャッチされない例外 'NSInternalInconsistencyException' によるアプリの終了、理由: '無効な更新: セクション 0 の行数が無効です。更新後に既存のセクションに含まれる行数 (4) は、更新前にそのセクションに含まれる行数 (4) に、そのセクションから挿入または削除された行数をプラスまたはマイナスした値 (1 挿入、0削除されました)」
幸いなことに、回避策を見つけました: _configureCell:atIndexPath: メソッド内で別の NSManagedObjectContext を作成して使用すると、アプリはクラッシュしません!
私が知りたいのは、この動作が正しいかどうかです。
これがサンプルプロジェクトです。 CrashMeViewController の '_configureCell:atIndexPath:' および '_addSomeRows' メソッドに注意してください