問題タブ [nspersistentdocument]
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.
macos - サンドボックス環境での SQLite ベースの NSPersistentDocument
Lion の新しいサンドボックス ルールを使用して、Mac アプリを最新の状態にしようとしています。ただし、com.apple.security.files.user-selected.read-write
許可を要求しているにもかかわらず、エラーが発生します。ログを見ると、deny file-write-create /Users/thom/Desktop/Filename.blah-journal
.
これは、サンドボックス ルールを考えると理にかなっています。つまり、ユーザーが SQLite ストアの場所を選択したため、その場所への書き込みが許可されます。ただし、SQLite は実際のファイルと一緒にジャーナル ファイルを保持しており、そのジャーナル ファイルへの書き込みは禁止されています。
その場合、SQLite に支えられた NSPersistentDocument はサンドボックス環境でどのように機能するのでしょうか?
ios - Mac / iPhone アプリ - コア データを iCloud およびデバイスに同期 (コア データを使用)
Core Data を使用する iPhone アプリと Mac アプリを作成しています。
これら 2 つのアプリのデータベースを iCloud ストレージ経由で同期させたいと考えています。
managedObjectContext
& persistentStoreCoordinator
& addedの実装を調整しましたmergeiCloudChanges
- 更新された Recipes サンプル コードから:
myapp をビルド/実行すると、「/Users/me/Library/Mobile Documents」ディレクトリにファイルが表示されます。
しかし、それがiCloudストレージに同期されているかどうかはわかりません.iPhoneとMacの間のデータは同期されていません.
データをクラウドに移行するために実装する必要がある他の方法はありますか?
また、実際に iCloud ストレージにあるドキュメントを表示する方法はありますか?
cocoa - Cocoa (Mac): コア データ ベースのアプリケーションを複数の保存ファイルから分割/結合する
私はOS X LionでCore DataベースのCocoaアプリケーションで作業しています。ここでは、データモデルの異なる部分、たとえばpartAとpartBを別々のファイルに保存できるようにする必要があります。
両方のファイルをプロジェクト ファイル/パッケージとして一緒に保存できるようにする必要がありますが、partB とは別に partA を読み込んで保存できるようにする必要もあります。
新しい partA ファイルをロードすると、partA に現在関連付けられているすべてのデータが置き換えられます。partA を保存しても、partB で変更されたデータは保存されません。
partA のエンティティーは、partB のエンティティーとの関係を維持する必要がありますが、これらは弱い可能性があります (必要になる可能性が最も高い)。
私の主な質問は次のとおりです。目的の機能を実装するための最良のアプローチは何ですか?
私の最初のアプローチはNSManagedObjectModel
、パーツごとに 1 つずつ、2 つの構成を含むものでした。構成ごとに 1つのインスタンスに 2 つのNSPersistentStore
インスタンスが割り当てられています。が割り当てられたNSPersistentStoreCoordinator
1 つのNSManagedObjectContext
インスタンス。storeCoordinator
個別のファイルを保存して開くことは、現在、このアプローチにおける私の主な関心事です。NSManagedObjectContext
-save:
メッセージは両方の構成を保存しているようです。の特定の構成に属するオブジェクトに加えられた変更のみを保存することはできますNSManagedObjectModel
か? それともNSManagedObjectContext
、構成ごとに 1 つずつ、2 つのインスタンスが必要ですか?
persistentStoreCoordinator
for partA にストアを追加してファイルを開くと、コンテキストにデータが追加されますが、これまでデータを置き換えることができませんでした。おそらくにメッセージを送信することによって、特定の構成に関連付けられているストアを知る方法はありますpersistentStoreCoordinator
か?
NSPersistentDocument
2 番目のアプローチも考えています。データ モデルの構成ごとに 1 つの2 つのサブクラスを設定して、データを個別のファイルに保存できるようにします。しかし、2 つの別個のインスタンスを持つことで、異なる構成のサブクラスNSManagedObjectContext
間の関係を設定できるかどうかはわかりません。NSManagedObject
誰かが良いアイデアを持っているか、正しい方向に向けることができたり、上記の機能を実装する方法の例さえあれば、それは高く評価されます.
cocoa - CoreDataがタイプをXMLとして設定していません
データ(CoreData、NSPersistentDocument)の問題をデバッグするのに苦労しています。
NSPersistentDocumentのサブクラスがあります。NSManagedObjectサブクラス/標準コアデータモデルを使用しています。NSPersistentDocumentまたはNSManagedObjectクラスで特別なことは何もしていません。(NSPersistentDocumentのサブクラスに)オブジェクトを作成しているだけです。
アプリにドキュメントを保存しようとすると、ファイル形式のドロップダウンが表示されます。Binary(デフォルト)、SQLite、およびXMLが含まれます。ファイルをXMLとして保存します。それを表示しようとすると(使用量を減らすか、Finderで開くことさえ)、ファイルがバイナリとして保存されていることがわかります。
XMLに強制するために行く必要がある特別なものはありますか?
Appleのドキュメントに基づく私の理解では、NSPersistentDocumentサブクラスを使用する場合、NSPersistentStoreまたはNSPersistentStoreCoordinatorを設定する作業を行う必要はありません。私の理解では、これらはすべて無料で提供されます。また、私が読んだことから、XMLがデフォルトです。
core-data - CoreDataの自動保存であり、自動保存後にすべてのデータが読み込まれない
データにNSManagedObjectサブクラスを使用するNSPersistentDocumentサブクラスがあります。
新しいドキュメントが開かれると、データ構造の初期化を行います(わずかな量の入力フィールド)。私が気付いたのは、無題のドキュメントが自動保存され、アプリケーションを再度開くと、そのドキュメントが読み込まれることです。アプリケーションが終了しても、ユーザーは(デフォルトでは)保存ダイアログを表示されません。ウィンドウが閉じると、ユーザーは閉じます。
最初の質問:
ユーザーがアプリケーションを終了したときに保存ダイアログを呼び出したい。この無題のドキュメントを(通常の状況では)ぶらぶらさせたくありません。私はそれを保存するかゴミ箱に捨てたいのです。
私は記入しようとしました:
保存するドキュメントをトリガーするため。save:
この時点でコンテキストを呼び出すと、エラーが発生します。私の知る限り、これはユーザーがまだ自分でファイルを保存していないためです。さらに、保存せずにウィンドウを呼び出す[self close];
か閉じます。[[self windowForSheet] close];
保存ダイアログを強制的に表示するにはどうすればよいですか?無題のドキュメントをゴミ箱に移動するにはどうすればよいですか?
2番目の質問(いいえ、数えられません):
アプリケーションの起動時に、処理する無題のドキュメントがある場合とない場合があるため、別のモデルで状態を追跡しようとしています。無題のドキュメントが登場したときに、初期データ(以前に参照した)が存在することはすでにわかりました。私の他のモデルには、入力されたデータの成功フラグ/状態を含むいくつかのメタデータがあります。入力されたデータがすべて配置されて正しい場合、状態はそのように示されます。残念ながら、アプリが既存の無題のドキュメントで起動するときに入力されたデータが読み込まれている間、メタデータクラスは読み込まれません。
コードの粗さを許してください。この時点で、コードを元に戻す前に、コードが希望どおりに機能していることがわかるまで、コードをいじっています。
配列は常に存在し、カウントは常にゼロであることに注意してください。いいえ、明示的にsave:
どこにも電話をかけていません。標準の自動保存、または保存を実行するユーザーに依存しています。
編集:
CoreDataEditorアプリをインストールしました。問題はデータの保存ではなく、データの読み込みにあることがわかりました。(注:別の問題により、XMLとして保存するように指示された場合、アプリはバイナリとして保存されます。これにより、多くのヘッドバンギングが発生します。)
私はそれを最も単純なコードに分解しました。これは、配列内のGameStateタイプのすべてのオブジェクトを取得する必要があります。保存されたファイルに適切なタイプのオブジェクトが明らかに存在するにもかかわらず、何も取得しません。
配列はnullではありませんが、[array count]
0です。
この時点で、私が見落としているのは単純なことだと思います。
2番目の編集:
-com.apple.CoreData.SQLDebug 5
SQLiteとして追加して保存しました。を呼び出すとexecuteFetchRequest
、デバッグログは生成されません。INSERT INTO ZGAMESTATE
エントリがログに表示されます。executeFetchRequest
バックエンドに渡されていないようです。
3番目の編集(これは燃える):
コアデータを使用して、新しいxcodeプロジェクトを作成しました(他のプロジェクトと同じように)。この1つの関数(必要に応じてスタブ)だけをコピーし、で呼び出しを実行しましたwindowControllerDidLoadNib
。この新しいプロジェクトでは、上記のコードが機能します。
objective-c - NSPersistentDocument の軽量移行
Core Data で SQLite ストアの軽量移行を行おうとしています。Xcode 4.3.1 で Lion 10.7.3 に取り組んでいます。
NSPersistentDocument サブクラス (AccountDocument) で、永続ストア コーディネーターの構成に使用するメソッドをオーバーライドして、移行に適切なオプションを取得できるようにしました。
(そのヒントについて Malcolm Crawford に感謝します: http://homepage.mac.com/mmalc/CocoaExamples/controllers.html )
アプリを実行すると、NSPersistentDocument の次の実装で失敗します-managedObjectModel
。
ドキュメントからわかることから、デフォルトの実装は次のようになります。
したがって、問題をもう少しデバッグするために、そのメソッドを次のようにオーバーライドしました。
(アイデアを提供してくれた Jeff LaMarche に感謝します: http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html )
バンドルと URL は両方とも、私が期待する場所を指しています (そして、Marcus Zarra のアドバイスに従い、プロジェクトをクリーンアップして、アプリケーション パッケージに不要な .mom または .momd バンドルがないようにしました: MergedModelFromBundles の使用: とバージョン管理 (CoreData))。それでも、URL からモデルをロードしている間、アプリは引き続きクラッシュします。
AccountDocument2.xcdatamodeld がバージョン管理用の 2 つのモデルを持つパッケージであることを確認しました: AccountDocument 2.xcdatamodel と (元の) AccountDocument.xcdatamodel。ファイル プロパティの [Versioned Core Data Model] ポップアップ メニューが [AccountDocument 2] に設定されています。
2 つのモデルの唯一の違いは、1 つのエンティティに追加の (およびオプションの) 属性があることです。私の理解では、モデルが軽量の移行に適しているということです。
明らかに、私はここで何か間違ったことをしていますが、何がわかりません。どんな助けでも大歓迎です…</p>
アップデート:
Martin の提案 (および NSPersistentDocument ドキュメントのチェック) に従って、アクセサーに次のコードを使用してみました。
まだクラッシュしています…</p>
アップデート
Twitter でいくつかの提案を受けて、Xcode 4.3.2 にアップグレードしましたが、問題は解決しません。
レイジアップデート
Snow Leopard で Xcode 4.2 を使用して、バージョン管理されたモデル パッケージ (AccountDocument2.xcdatamodeld) を作成しました。アプリをビルドして実行すると、すべてが期待どおりに機能します。
次に、AccountDocument2.xcdatamodeld ファイル パッケージを Lion と Xcode 4.3.2 に戻しました。アプリをビルドして実行すると、.momd リソースの読み込み中に引き続きクラッシュします。はい、子供たち、つまり、Xcode 4.3.x と Data Model Compiler (MOMC) のせいです。すべてのビルドを Snow Leopard で実行する以外に回避策がありません。
私は Xcode 4 をバッシングする人ではありませんが、ツールチェーンが不透明な仕様 (.xcdatamodel および .xcdatamodeld) から不透明なファイル (.mom および .momd) を生成できない状況に陥った場合、それを行うのはかなり困難です。 Mac と iOS ツールの状態について楽観的であること。これらのプラットフォームのコア コンポーネントが壊れて、最新バージョンの SDK と開発者ツールでアプリをビルドして実行できないというのはばかげています。
このアップデートに来ました
これが Xcode 4.3.2 の Data Model Compiler (MOMC) の重大なバグであることのさらなる証拠: Xcode 4.2 によって作成された Resource フォルダーから .momd バンドルをプロジェクトにコピーし、それらをビルドにコピー ファイルとして追加した場合ビルド段階で、アプリケーションは正常に動作します。
また、さまざまなエンティティの属性の検証ルールとデフォルト値を削除するいくつかのテストも行いました (以下のマーカスの提案に基づいています)。変更はありません。コンパイラは引き続き無効な .momd を作成します。また、何も変更されていないバージョン管理されたモデルを作成しようとしました。コンパイルされた .momd はクラッシュし続けました。したがって、現在のモデル (およびそれらが表すデータ) に含まれているものは何でも、問題の原因です。
また、注意してください:このバグは NSPersistentDocument に分離されていません(この質問を始めたときに最初に考えたように)[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]
.
今のところ、Snow Leopard で Xcode 4.2 を使用してモデルを編集/バージョン管理し、コンパイルされたリソースを Lion で Xcode 4.3.2 に移動します。Core Data を何らかの方法で使用する場合は、このバグが解決されるまで同じことを行うことをお勧めします。私を信じてください、あなたがしなければ一体何が起こっているのかを理解しようと何日も費やすでしょう.
レーダーを送信するには…</p>
レーダーの更新
このレーダーを送信しました:
http://www.openradar.me/11184500
The Oh Crap It Must Be Lion アップデート
http://developer.apple.com/downloadsから Lion ツール用の Xcode 4.2 をダウンロードしてインストールしました。Radar で使用されているサンプル アプリケーションは引き続きクラッシュします。
(注: DeveloperTools.pkg の署名に使用された証明書の有効期限が切れているため、Xcode 4.2.1 をインストールすることはできません。Xcode 4.2 のみが機能します。)
NDA を締結している場合は、ベータ ツールも役に立たないことがわかります。
Xcode 4.2 がインストールされた Snow Leopard のコピーがあることを願っています: http://furbo.org/2012/03/28/vmware-for-developers/
WTF Do Fetch リクエストは、バージョン管理されたエンティティと属性の更新に関係しています
TwitterのEvadne Wu経由:
https://twitter.com/#!/evadne/status/187625192342818818
そして彼女はどのようにそれをしたか:
https://twitter.com/#!/evadne/status/187629091518816258
(.mom ファイルはバイナリ plist です。)
問題の根本は、単一のフェッチ リクエストです。それが、あるモデルから別のモデルへのデータの移行にどのように影響するかは、Apple のエンジニアが把握する必要があります。
macos - 別の保存形式で NSPersistentDocument を使用するのは悪いことですか?
コア データ ベースのドキュメント中心のアプリケーションを作成することを考えていますが、保存するファイル形式を XML、画像、その他のものの独自のバンドルにしたいと考えています。
私の計画は、-writeToURL、-readFromURL などの呼び出しを受信したときにファイル形式と Core Data の間をシリアル化する NSPersistentDocument のサブクラスを使用することです。
これはアンチパターンですか?私はそれを試し始めましたが、うまくいくように見えますが、このアプローチに関するドキュメントや議論はあまり見られないため、一時停止します.
macos - NSPersistentDocumentでのカスタムNSManagedObjectContextsの使用
NSPersistentDocumentがあります。デフォルトのmanagedObjectContextを使用すると、期待どおりに動作します。ウィンドウには、新しいオブジェクトが追加されたときにドキュメントが「編集」されていることが表示され、新しい無題のドキュメントを終了すると、「名前を付けて保存」シートが表示されます。
ただし、デフォルトのmanagedObjectContextを自分で作成したもの(プライベートキュー)に置き換えると、これらの動作はすべて消えます。ドキュメントは、ドキュメントがいつ編集されたかを認識していないように見えます。新しい無題のドキュメントは、「名前を付けて保存」シートが表示されずに閉じられます。[managedObjectContext hasChanges] == YESであるにもかかわらず、これはすべてです。
任意のアイデアをいただければ幸いです。
macos - NSDocument: ドキュメントを自動保存できませんでした。ファイルは別のアプリケーションによって変更されました
この投稿のタイトルを検索すると、それがかなり一般的であることがわかります。実際、Xcode からこのエラーが発生しました。しかし、私は修正を見つけることができないようです。プログラムを実行すると、これが表示されます。changeCountTokenForSaveOperation の呼び出し中または呼び出し後に発生するようです。コアデータを使用しているという事実ではなく、元に戻すマネージャーに関連しているようですが、間違っている可能性があります。
これの原因や修正方法を知っている人はいますか?
macos - コア データ モデルが更新されたアプリで開くと、ディスク上のファイルが変更されます
アプリのカスタム ファイル タイプ (XML として保存されている) を処理するために NSPersistentDocument と Core Data に依存する OS X アプリがあります。
Core Data モデルを更新すると (単純な変更を行い、軽量の移行に依存しています) 、新しいモデルを利用しているアプリでファイルを開くだけで、ディスク上のファイルが変更されることに気付きました。元のファイルのバックアップ バージョンもディスクに表示されます (ファイル名に「~」が追加されます)。これが発生すると、以前の (リリースされた) バージョンのアプリでファイルを開くことができなくなります。
明確にするために:私は単にファイルを開いています。ファイルをディスクに保存していません。Finder で見ると、ファイルを開くとすぐに「~」が表示されます。
これは非常に危険な行為のようです。私は非常に用心しなければならず、私のユーザーベースが現在使用しているファイルを決して開かないようにしなければなりません。
これは OS X のデフォルトの動作ですか? NSPersistentDocument または私の Core Data モデルを構成して、ファイルを開くとストアが内部的にアプリに変更されますが、明示的に保存しない限り、変更がディスクに反映されないようにする方法はありますか?