問題タブ [mapping-model]
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 - 移行によってコア データ インデックスを特定の属性に追加する
パフォーマンス上の理由から、エンティティの一部にインデックス付き属性を設定したいと考えています。変更を実行するために、新しいコア データ モデル バージョンを作成しました。Core Data は変更を検出し、モデルを新しいバージョンに移行しますが、NO INDEXES ARE GENERATED .
データベースを最初から再作成すると、インデックスはそこにあります。iPhone と Simulator の両方で SQLite Browser を使用して確認しました。この問題は、以前の形式のデータベースが既に存在する場合にのみ発生します。
インデックスを手動で追加する方法はありますか? そのためのSQLを書きますか?または、何か不足していますか?私はすでにいくつかのより重要な移行を行っていますが、問題はありません。しかし、これらの欠落したインデックスは私を悩ませています。
助けてくれてありがとう!
mapping-model - Core Data Migration - 「ソース ストアを追加できません」エラー
私の iPhone アプリでは Core Data を使用しており、自動的に移行できないデータ モデルに変更を加えました (つまり、新しい関係を追加しました)。データ モデル バージョンを追加し ([デザイン] -> [データ モデル] -> [モデル バージョンの追加])、新しいデータ モデルの変更を新しいバージョン 2 に適用しました。次に、マッピング オブジェクト モデルを作成し、ソース モデルと宛先モデルを正しいデータ モデルに設定しました。 (それぞれ古いものと新しいもの)。
アプリを実行し、persistentStoreCoordinator を呼び出すと、アプリは次のように barfs します。
2010-02-27 02:40:30.922 XXXX[73578:20b] 未解決のエラー エラー Domain=NSCocoaErrorDomain Code=134110 UserInfo=0xfc2240 「操作を完了できませんでした。(Cocoa エラー 134110)」、{ NSUnderlyingError = エラー Domain= NSCocoaErrorDomain Code=134130 UserInfo=0xfbb3a0 "操作を完了できませんでした。(Cocoa エラー 134130。)"; reason = "ソース ストアを追加できません"; }
FWIW (あまり考えていません) また、persistentStoreCoordinator で通常のコード変更を行い、NSMigratePersistentStoresAutomaticallyOption と NSInferMappingModelAutomaticallyOption を使用しました (自動的に移行できる将来のデータ モデルの変更用)。さらに関連性があるのは、ファイル/リソース タイプが「momd」である initWithContentsOfURL を呼び出すことによって、私の managedObjectModel が作成されることです。
マッピング モデルのソース モデルとターゲット モデルの両方を更新し ([設計] -> [マッピング モデル] -> [XXX モデルを更新])、マッピング モデルを削除して再作成しようとしました。クリーニングして再構築しましたが、すべて役に立ちませんでした。上記のエラー メッセージが引き続き表示されます。
この問題をさらにデバッグまたは解決する方法についての指針/考えはありますか? これはビルド環境の問題のように感じられるため、コード スニペットは投稿していません (私のコードは非常に標準的です。マッピング モデルを使用して移行を処理するための通常のコア データ コードですが、役立ちます)。
どんな助けにも感謝します。
ありがとう
iphone - 文字列への iPhone コアデータの移行日
もともと日付属性で始まったエンティティがあります。元のフィールドを保持することに加えて、日付を保持する文字列である属性を追加しました。マッピング モデルを作成しましたが、移行中に "2010-10-25" 形式の日付フィールドからデータが入力された新しい文字列フィールドを取得するために "値式" に何を入力すればよいかわかりません。
どんな助けでも大歓迎です。
また、ソートしたいので、一時的ではなく実際の属性である必要があります。手遅れになるまで一時的な属性を並べ替えることができないことに気づきませんでした。
objective-c - Core Dataの推定マッピングモデル作成(軽量移行)でのクラッシュ。スレッドの問題?
アプリケーション内で(Core Dataの軽量移行を使用して)推測されたマッピングモデルを作成すると、ランダムにクラッシュします。ちなみに、実行中にアプリケーションでプログラムで実行する必要があります。
これが私がこのモデルを作成する方法です(もちろん、適切なcurrentModelオブジェクトとnewModelオブジェクトを作成した後):
NSMappingModel * mappingModel = [NSMappingModel inferredMappingModelForSourceModel:currentModel destinationModel:newModel error:&error];
問題はこれです:このメソッドはランダムにクラッシュします。それが機能するとき、それは問題なくうまく機能します。しかし、クラッシュすると、アプリケーションがクラッシュします(メソッドが失敗したことを示すためにnilを返す代わりに)。ランダムとは、時々それが起こることもあれば起こらないことも意味します。予測できません。
さて、これが取引です:私はこのメソッドを別のスレッドで実行しています。より正確には、グローバルメインキューで実行するためにGCDを介して渡されるブロック内にあります。UIをユーザーに鮮明に表示するには、これを行う必要があります。つまり、作業の進行中に進行状況インジケーターを表示できるようにするためです。
奇妙なことに、GCDを削除してメインスレッドで実行すると、正常に動作し、クラッシュすることはないようです。したがって、これがクラッシュしているのは、これを別のスレッドで実行しているためでしょうか?
マルチスレッドに関するCoreDataのルールに違反しているとは思わないので、どういうわけかそれは奇妙だと思います。特に、管理対象オブジェクトを渡さず、MOCにアクセスする必要があるときはいつでも、新しいMOCを作成します。つまり、以前に作成されたMOC(またはさらに言えば何でも)に依存しません。メインスレッドに。発生する小さなMOCに加えて、マッピングモデルの作成方法の後、つまりアプリがクラッシュした時点の後に発生するため、ここで検討しているクラッシュの原因となる可能性はありません。
私がしているのは、2つのMOMを取得し、それらの間のマッピングモデルを要求することだけです。糸脱毛の下でもそれは間違いではありません、今それはできますか?
何が起こっているのかについてのアイデアはありますか?
objective-c - Core Dataの移行の問題:「永続的なストアの移行に失敗しました。ソース管理対象オブジェクトモデルがありません。」
背景
- 2つの管理対象オブジェクトモデルを備えたCocoa非ドキュメントコアデータプロジェクト。
- モデル1は同じままです。モデル2が変更されたので、ストアを移行したいと思います。
- Xcodeで[デザイン]>[データモデル]>[モデルバージョンの追加]で新しいバージョンを作成しました。
- バージョン間の違いは、1対多に変更された単一の関係です。
- モデルに変更を加えて保存しました。
- 古いモデルをソースとして、新しいモデルを宛先として持つ新しいマッピングモデルを作成しました。
- すべてのマッピングモデルとデータモデルがコンパイルされ、すべてがアプリバンドルのリソースフォルダーにコピーされていることを確認しました。
- 永続ストアを追加するときのように、
NSMigratePersistentStoresAutomaticallyOption
キーを使用して辞書を渡すことにより、移行をオンにしました 。[NSNumber numberWithBool:YES]
- バンドル内のすべてのモデルをマージするのではなく、使用する2つのモデル(モデル1とモデル2の新しいバージョン)を指定し、を使用してそれらをマージしました。
modelByMergingModels:
問題
移行するために何をしても、次のエラーメッセージが表示されます。
「永続的なストアの移行に失敗しました。ソース管理対象オブジェクトモデルがありません。」
私が試したこと
- ビルドするたびにクリーンアップします。
- リソースに移行先のモデルのみを含めるか、コンパイルするか、またはその両方を行うさまざまな組み合わせを試しました。
- エラーメッセージは、移行用のソースモデルが見つからないことを示しているため、Resourcesフォルダーとコンパイルの両方にモデルのすべてのバージョンを入れてみました。
- データモデルの元のバージョンに戻すことで、本当に基本的なエラーが発生していないことを確認しました。アプリは正常に動作します。
- マッピングモデルとモデルの新しいバージョンを削除し、クリーンアップしてから、両方を再作成しました。
- 新しいモデルに別の変更を加えてみました-代わりにエンティティを削除します。
私は私の知恵の終わりにいます。
どこかで見たことのない大きな間違いを犯したと思わずにはいられません。何か案は?
objective-c - NSMappingModel のプログラムによる作成
エンティティの 1 つ (多数のエンティティがある) が異なる属性を持っていることを除いて、まったく同じ 2 つのモデル間のマッピング モデルをプログラムで (Lightweight Migration なしで) 作成したいと考えています。このエンティティを「人」と呼びましょう。そして、宛先モデルが持っているとしましょう
1) 「住所」という新しい属性を追加
2) 「eyeColor」という属性を削除
3) 「名前」と呼ばれる属性を保持する (つまり、何も行わない)
プログラムでこれらのモデル間に NSMappingModel をどのように作成しますか? 私はたまたま、これを自分で行うのに役立つかもしれない明確な質問をいくつか持っています。
Q1) "Person" 以外のすべてのエンティティに対して、変更されていない場合でもNSEntityMapping オブジェクトを作成する必要がありますか?
Q2) 新規作成中の「人物」の「住所」属性はどうすればいいですか?そのための NSPropertyMapping を何らかの形で作成する必要がありますか?
Q3) 「人物」の「名前」属性はどうすればいいですか?単に同じままであっても、そのために NSPropertyMapping を作成する必要がありますか?
Q4) "Person" に対応するNSEntityMapping の場合、"eyeColor" の NSPropertyMapping を作成して削除するのは適切な方法ではありませんか? または、「eyeColor」の NSPropertyMapping を作成する必要がありますか? はいの場合、このオブジェクトはどのように作成されますか?つまり、その目的が「eyeColor」を取り除くことであると判断するものは何ですか?
ドキュメントには NSMappingModels をプログラムで作成する方法の良い例がないため、これらの質問に自分で答えることができないことをお詫びします。Lightweight Migration の使用は許可されていないことに注意してください。これを手動で行う必要があります。
iphone - コア データの推定移行 – 自動「軽量」 vs 手動
いくつかの簡単な方法 (属性の削除、属性の追加、インデックスの削除) で既存の iPhone アプリのモデルを更新し、自動軽量移行を使用して永続ストアを移行できます。
データセットの典型的なサイズのため、処理時間は重要ではなく、ユーザーへのフィードバックを保証します。
NSMigrationManager
migrationProgress
移行の実行時に KVO 通知を送信するシンプルで便利な値を提供します。これはフィードバックを提供するための基礎となりますが、推論されたモデル ( [NSMappingModel inferredMappingModelForSourceModel:destinationModel:error:]
) を使用しようとすると、まったく同じデータセットに対して大幅に異なるタイミングが発生します。
オリジナルの iPhone (2G) でのプロファイル結果、キャッシュ サイズ: ディスク上で 1.785 MB。
自動推定軽量移行
手動の推定移行
したがって、推定モデルでは、手動の移行は自動の 5 倍以上の時間がかかります!
更新: モデルの読み込み
「移行オプション」のコアデータのドキュメントには、次のように記載されています。NSPersistentStoreCoordinator
NSInferMappingModelAutomaticallyOption
... マッピング モデルが見つからない場合、コーディネーターはマッピング モデルを推測しようとします。
そのため、XCode でビルド、コンパイル、およびバンドルされたマッピング モデルを削除 (または単に対象外) にして、推論された軽量の移行を実行できるようにする必要があります。
これは大きな矛盾であり、処理中の進行状況をまったく示さない軽量オプションです。NSPersistentStoreCoordinator -addPersistentStoreWithType:configuration:URL:options:error:
migrationProgress
自動移行中に値を取得するサポートされている方法、または手動処理中に自動と同じくらい高速になるように推論されたマッピングモデルを構成する方法を誰かが提供できますか?
更新: バグレポート
WWDC のエンジニアに話を聞いたところ、migrationProgress
軽量の自動移行処理を要求するバグ レポートを求められました。
進捗レポートを追加するために API が更新された場合は、もう一度更新します。
core-data - xcdatamodelの新しいバージョンをxcodeに表示するにはどうすればよいですか?
環境:xcode 3.2.1、ドキュメントベースのコアデータアプリケーション。
コアデータを使用するドキュメントベースのココアアプリがあります。データモデルの複数のバージョンを作成しましたXcodeは、時間をかけて作成した複数のxcdatamodels(バージョン)を含むxcdatamodeldディレクトリを示しています。(適切なマッピングモデルもあります)。すべて正常に動作しますが、新しいバージョンを作成したい場合、xcodeは新しいxcdatamodelの表示を拒否します。ファイルは実際に作成されます。xcdatamodeldパッケージに入ると、ファインダーで確認できます。
誰かがこの行動に遭遇しましたか?修正はありますか?おそらく私のxcodeprojファイルが何らかの理由で破損していますか?
ありがとう、マーティン
objective-c - CoreData: 2 つのモデルからの移行
私は一般的なアプリモデルを持っています。リリースされた後、どのボディでもプラグインを実行できます。このプラグインは、私の一般的なデータベースとマージされた新しいデータベースパーツを決定できます。しばらくして、新しいバージョンのデータベースをリリースします^。プラグイン作成者は新しいバージョンのデータベースをリリースするかもしれません。したがって、マージされたデータベースの古いバージョンを新しいバージョンにマップする必要があります。どうすればこれを行うことができますか?
iphone - Core Dataの自動軽量移行から手動に切り替える方法は?
私の状況はこの質問に似ています。私は次のコードで軽量の移行を使用していますが、Appleドキュメントや他のSOスレッドからはかなりバニラです。CoreDataスタックを初期化するときにアプリの起動時に実行されます。
一部のユーザー、特に低速のデバイスでは、示された行のログでクラッシュが確認されています。
修正は、これを手動のマッピングと移行に切り替えることであることを理解しています。それを行うためのレシピは何ですか?私にとっての長い道のりは、すべてのAppleドキュメントを読むことですが、特にスキーマ移行のための良い例とチュートリアルがあったことを思い出しません。