問題タブ [nspersistentstore]
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.
ios - この NSPersistentStoreCoordinator は保存操作を実行できません
アプリケーションにログインすると、NSManagedObjectContext *managedObjectContext = self.managedObjectContext; でクラッシュするようです。次の保存コンテキスト メソッドで、「この NSPersistentStoreCoordinator には永続ストアがありません (スキーマの不一致または移行の失敗)。保存操作を実行できません。」というエラーが表示されます。
core-data - NSBundle の CoreData sqlite ファイル
JSONファイルがあります。サイズは約20MBです。
プロジェクト 1. そこで、プロジェクトを作成し、その JSON ファイルから Core Data にデータをインポートしました。Core Data は、次の sqlite ファイルを作成します。コンテンツ全体を JSON からコア データにコピーし、そのファイルを 1 回作成するのに 10 分かかりました。
現在、Project2 に入っています。MainBundle の 3 つのファイルすべてをコピーしました。Project1 から直接コピーしたかのように .xcdatamodeld を作成する必要がありますが、.momd ファイルが見つかりません。
それで、NSBundle mainBundle からの storeURL は信頼できるアプローチであり、wholeDataList.sqlite、wholeDataList.sqlite-shm、および wholeDataList.sqlite-wal ファイルが保存されますか?
通常、それらはドキュメント ディレクトリにあります。
ios - iOS10 NSPersistantContainer に気づいた人はいますか。NSPersistantStoreCoordinator の代替品ですか?
iOS 10 より前は、CoreData statck を初期化するために、次の 3 つの主要コンポーネントがありました。
しかし、最新の XCode 8 でコア データ アプリケーションを作成したところ、NSPersistantStoreCoordinator がなく、代わりに新しい iOS 10 NSPersistantContainer と NSPersistentStoreDescription が表示されることがわかりました。これは、使用されている既存の coredata メソッドの代わりになりますか?
ios - NSPersistentStoreCoordinator は、特定の NSManagedProperty を読み取った後に NSManagedObject の割り当てを解除すると、EXC_BAD_ACCESS をスローします。
エラーの説明
コア データ (SQLite に基づく) と次のNSManagedObject
サブクラスを使用してローカルに保存されたデータを含むアプリがあります。
上記のスニペットのコメントで述べたように、newStateJson
プロパティから読み取った値の割り当てを解除できるようにすると、エラーが発生します。
私が受け取ったエラーは、バックグラウンド スレッドからのものです。
診断ツールでゾンビを有効にすると、代わりにこれが表示されます
また、ゾンビが有効になっている場合、コンソールに次のメッセージが表示されます。
2016-11-18 16:26:13.773 ScoutingData_Example[51750:4716636] *** -[CFData release]: 割り当て解除されたインスタンス 0x7f8c4eb10ae0 に送信されたメッセージ
そして、次のスタック トレース:
これまでに試したこと
NSManagedObjectContext
このデータを取得するために使用された を静的変数に格納して、コンテキストの割り当てが解除されないようにしましたが、効果はありませんでした。
NSData?
プロパティをプロパティに変換しString?
、データをバイナリ データではなく Base64 でエンコードされた文字列として保存しようとしましたが (バッキング モデルも更新しました)、効果もありませんでした。エラーは引き続き発生しました。
プロパティを読み取るコードをコメントアウトしようとしましたが、エラーは消えましたが、それは明らかに受け入れられる解決策ではありません。
値を読み取った後、値をグローバル変数に格納して、割り当てが解除されるのを防ぎ、エラーが消えないようにしましたが、それも有効な解決策ではありません。
値を使用するすべてのコードをコメントアウトしようとしましたが、代わりに値をコンソールに出力するだけで、エラーが持続しました。これにより、プロパティにアクセスし、後で割り当てを解除するという行為が、このエラーの条件を作成するものであると私は信じています。
私はかなり困惑しています。データを読み取った後にデータをどう処理するかが問題になるというのは非常に奇妙に思えます。また、割り当てが解除されたときにバックグラウンド スレッドで何かが起こるというのは特に奇妙に思えます。
さらに奇妙なのは、この 1 つのプロパティに固有のように見えることです。たとえば、newDataJson プロパティを読み取る行のすぐ上にある id プロパティは問題を引き起こしません。id は NSData ではなく文字列であるため、それは違うと思うかもしれませんが、代わりに NSData プロパティを文字列プロパティに変換しようとしましたが、それでもエラーは変わりませんでした。
どんなアイデアでも大歓迎です。ありがとう。
編集
これが役立つかどうかはわかりませんが、これが私のモデルスキーマです
ios - Objective c でのマルチスレッドの扱い
私のプロジェクトでは、コア データでさまざまなタスクを実行するためにNSOperationQueuesを使用しました。このいくつかの操作は performBlock で実行され、別の操作はバックグラウンド キューまたは mainQueue で呼び出される PerformBlockAndWait で実行されます。これには、さまざまなスレッドを処理するためのメイン コンテキストとバックグラウンド コンテキストがあります。アプリケーションからログアウトするときに、保存されているすべての詳細をクリアしたいコアデータで、現在実行中のすべてのスレッドを停止します。
つまり、アプリケーションからログアウトするときは、コアデータに保存されているすべてのデータを消去してから、実行中のすべてのバックグラウンド スレッドを停止する必要があります。どうすればこれを達成できますか?