問題タブ [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.

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

objective-c - NSDocument ベースのアプリケーションと NSToolbar

私は NSDocument (NSPersistentDocument) に基づくアプリケーションを持っています。アプリケーションでは、(通常のように) 複数のドキュメントを作成できます。

メイン ドキュメント ウィンドウ (NSPersistentDocument に基づく) には、IB、ツールバーが追加されています。insertItemWithItemIdentifierコードでは、メソッドとを使用してツールバー項目 (NSToolbarItems) に追加します- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag

コードサンプル:

ドキュメントを 1 つだけ開くまでは、すべて問題ありません。最初のドキュメント ウィンドウで 2 番目のドキュメントを開く (または新しいドキュメントを作成する) と、ツールバー アイテムが 2 倍になります (3 番目のドキュメントを開くと、アイテムは最初のウィンドウで 3 倍になり、2 番目のウィンドウで 2 倍になるなど)。

itemForItemIdentifier編集:ツールバー項目を追加しようとするたびに、各ウィンドウで呼び出されることに気付きました。例: 2 つのウィンドウ (2 つの開いているドキュメント) があり、1 つのウィンドウに 1 つのボタンを追加しようとするitemForItemIdentifierと、2 回呼び出されます。
すべてのドキュメントには、このドキュメントにのみデリゲートが設定された独自のツールバーがあるため、私には奇妙です。

私は自分が何を間違ったのか分かりません。誰かが私がどこを間違えたか指摘してくれるかもしれません。

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

core-data - 新しいプロジェクト新しいモデルNSPersistentDocumentこのNSPersistentStoreCoordinatorには永続ストアがありません

私は何時間もstackoverflowとGooglingを検索してきました。CoreDataとバインディングをいじくり回す簡単なプロジェクトを作成しました。モデルにエンティティが追加され、機能しなくなりました。新しいドキュメントにデータを追加しようとすると、「このNSPersistentStoreCoordinatorには永続ストアがありません。保存操作を実行できません」というメッセージが表示されていました。私は運が悪かったので見つけたすべてのアドバイスに従いました。

最後に、新しいプロジェクト(NSPersistentDocumentベース)を作成し、新しいモデルを最初から作成しました。プロジェクトを初めて実行する前に、モデルが完璧であることを確認しました。

WindowControllerDidLoadNibの場合:プロジェクトは、データを追加するためのメソッドを呼び出します。addDataルーチンの前に、ManagedObjectContextとManagedObjectModelをログに記録します。どちらもゼロではありません。

私はまだこの%$&#@を取得しています!エラー。

誰かがこれについて何か新しいアイデアを持っていますか?

編集:これは、新しい無題のドキュメントが保存されたことがないためでしょうか?もしそうなら、どのようにそれを回避しますか?無題のドキュメントを保存できますか?本当にしたいですか?

しばらく前にファイルのインポートで同様の問題が発生しました。私は完全に制御できるので、ドキュメントに名前を付けて保存し、コンテキストを保存することができました。

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

cocoa - NSPersistentDocument および MagicalRecord を使用した NSArrayController

NSArrayControllers へのバインディングで Core Data を使用するプロジェクトがあります。私は MagicalRecord を見つけ、それを実装し始めました。

私の質問は、AppDelegate を使用せずに MagicalRecord を実装するにはどうすればよいですか? それとも、独自の AppDelegate を作成してそこに実装しますか?

前もってありがとう、ミカエル

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

multithreading - メインスレッドに追加されたスレッド内のコアデータ読み取りデータ

ドキュメント モデルに NSPersistentDocument を使用する Mac ドキュメント ベースのアプリがあります。

新しいドキュメントが作成されると、アプリはいくつかのデフォルト データ (いくつかのスポーツ オブジェクトとユーザー データ) を initiWithType メソッドでドキュメントに追加します。

}

アプリには、いくつかのハードウェアからデータをインポートするインポート関数があり、スレッドで実行されます。これは次のように設定します (managedObjectContext は NSPersistentDocument のものです)。

データは、ハードウェアから多数の NSManagedDataObject アイテムにインポートされます。各 ManagedObject には「Sport」フィールドがあり、ドキュメントの作成時に作成されたスポーツ オブジェクトの 1 つを入力する必要があります。

- (id)initWithType:(NSString *)typeName error:(NSError **)outErrorただし、スレッド (moc) の新しい ManagedObjectContext には、追加されたスポーツ オブジェクトは存在しません。

アプリを実行して新しいドキュメントを作成し、アプリを 1 分ほどアイドル状態にしてからインポートを試みると、Sport オブジェクトはスレッドの管理対象オブジェクト コンテキストに存在します。

スレッド内の新しい ManagedObjectContext を NSPersistantDocument のメインのものと同期するにはどうすればよいですか?

[managedObjectContext processPendingChanges];とを試しまし[managedObjectContext setStalenessInterval];たが、どちらもこの問題を解決していないようです。

興味深いことに、これは Mac OS X 10.8 では発生せず、10.7 でのみ発生するようです。

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

core-data - Core Data(Xcode)のmanagedObjectContextからオブジェクトを読み取る方法

tableViewでいくつかの数値を取得するプログラムがあります。いくつかの属性を持つエンティティを持ち、テーブルビューの列をそれらの属性にバインドできるCoreDataベースのプログラムがあります。ここで、各列の合計を取得したいのですが、行の各データを読み取って追加する方法が見つかりませんでした。使用しました

NSString * S = [self.managedObjectContext valueAtIndex:1 inPropertyWithKey:@ "aColumnName"];

しかし、私はこのエラーを受け取ります:

このクラスは、キー名のキー値コーディングに準拠していません。

誰かがそれについて私を助けることができますか?

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

objective-c - CoredataとNSPersistentDocument:列番号の合計がクラッシュする

プログラムの列の@sumバインディングに問題があります。

私はCoredata、NSPersistentDocumentベースのプログラムを実行しています。私はほとんどすべてをIB、データモデルの作成、NSArrayController、NSTableViewから行っています...

62個の属性(61個のNSStringと1個のNSNumber)を持つエンティティが1つだけあります。12722レコードのCSVファイルをインポートします。インポートはうまく機能し、xml、binary、sqliteに保存できます...プロセス全体が完全に機能することを再確認しました。保存/ロードできます。すべてがそこにあります。

私が抱えている問題:NSNumberプロパティを使用して列の@sumにバインドするラベルを作成しました。これが私がした方法です

プログラムを実行したら、[インポート]、[すべての行を選択]の順にクリックすると、@sumが正常に機能します。ただし、これは高速です。最初の問題は次のとおりです。ファイルを保存し(すべて試してみました... binary / xml / sqlite)、後でロードしてもう一度[すべて選択]を実行すると、プログラムがエラーなしでクラッシュします

「プロファイル」->割り当てを試してみました。私は気づきました:

  • メモリリークはありません
  • ディスクからロードしてからすべてを選択する場合:非常に遅くなります。5分後(停止しました)、+ 45MBのCFNumber(Live Bytes)と> 1.500.00#Overallが表示されました。したがって、Interger32タイプの12722行/レジスタについて話しているので、ここで何かが間違っています。

2番目の問題は同じですが、異なる角度から再現されます。「selection」を使用する代わりに、「arrangedObjects」を使用しようとしました。この場合、CSVからインポートしているときでも問題が発生し、非常に遅くなり、最終的にクラッシュします。作成済みのファイルを開こうとするとクラッシュします。

これは私がlabel->BindingsInspector->Valueを行った方法です

何を探すべきか、または問題がどこにあるかを見つけるのに役立つアイデアについて、いくつかの光を当ててください。

どうもありがとう。

ルイス


----より多くの研究の後の新しい編集----

理解できない回避策を見つけました。コメント/回答をいただければ幸いです。

私のプログラムはCoredata(SQLite)、NSPersistentDocument、NSTableView、NSArrayControllerを使用しています。動作するNSTextFieldを@sumコレクション操作にバインドしたい

問題:SQLite DBが設定された既存のドキュメントを開き、NSWindowControllerからarrangedObjects。@ sum.t_24_Bookingsにバインドしようとすると、プログラムがクラッシュします。

私の最初の推測は、ペン先がロードされた後、オブジェクトコントローラーのコンテンツにアクセスできないことに関連していますが、成功せずにこのような最初のフェッチを実行するという推奨事項に従いました。

このアイデアを続けると、「実際の」完全なフェッチを作成し、Documentサブクラスから@sumアクセスを実行すると、機能することがわかりました。

これは、回避策を機能させるために配置したコメント付きのコードです。

ABDocumentインターフェイス(NSPersistentDocumentサブクラス)

ABDocumentの実装

ABWindowController(私のNIBをロードするコントローラー)

コメントしていただければ幸いです。解決策はありますが、理由がわかりません。

戦車、
ルイス

0 投票する
0 に答える
91 参照

cocoa - NSAutosaveElsewhereOperation でユースケースを区別する

Core Data File Wrapperの例に AutoSave サポートを追加しようとしています

新しい/無題のドキュメントwriteSafelyToURLがある場合、NSAutosaveElsewhereOperation タイプで呼び出されます。

悪いことに、私は両方の典型的なユースケースでこのタイプを取得します-新しいファイル:ファイルラッパーと永続ストアファイルを作成して完全な新しいドキュメントを保存します-差分を保存:ファイルラッパーが既に存在し、更新のみが必要な場合.

他の誰かがこのトピックを既に扱っていますか、または誰かが既にこれを移行しましたか?

元のサンプルでは を使用しoriginalStoreURLてこれら 2 つのユース ケースを区別していますが、どのソリューションが最適でしたか?

ありがとう

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

objective-c - autosavesInPlace により、新しいドキュメントの保存が失敗する

return 、 return にautosavesInPlace設定されている場合、新しいドキュメントの保存に失敗する NSPersistentDocument ベースのアプリがあり、問題は消えます。YESNO

  • 新しいドキュメントを作成します
  • 変更を加える
  • 保存して実行するNSSaveAsOperationと、ドキュメントの名前と URL が変更され、すべて問題ないように見えますが、次の保存では非常に説明的なメッセージが表示されます。

NSPersistentStoreSaveError = 134030, // unclassified save error - something we depend on returned an error

これは、ドキュメントが の後に保存を実行しようとしたときにのみ発生しますNSSaveAsOperation。他の保存タイプは、既存のドキュメントへの変更と同様に正常に機能します。興味深い効果は、名前や場所を変更しないと、この問題も発生しないことです。

の例外バックトレースを取得しています

フレーム #0: 0x00007fff988143c5 libobjc.A.dylib objc_exception_throw frame #1: 0x00007fff94c5f5f9 CoreData-[NSPersistentStore(_NSInternalMethods) _preflightCrossCheck] + 697 フレーム #2: 0x00007fff94c3198b CoreData -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 603 frame #3: 0x00007fff94c5aa98 CoreData-[NSManagedObjectContext 保存:] + 456 フレーム #4: -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 3743 frame #5: 0x0000000100002de7 ZZZZ0x00007fff91baa101 :error:] + 135 at ZZZZDocument.m:209 frame #6: 0x00007fff91baabc7 AppKit -[NSPersistentDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 611 frame #7: 0x0000000100002ea3 ZZZZ-[ZZZZDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 115 at ZZZZDocument.m:223

何か案は?

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

objective-c - NSPersistentDocumentでデフォルトのpersistentStore/autosaveを強制的に作成する方法

大量のデータをインポートできるCoreDataを使用したドキュメントベースのCocoaアプリがあります。このインポートには時間がかかるため、バックグラウンドで実行しますが、NSManagedObjectContextスレッド保存ではないため、ドキュメントののをpersistentStoreCoordinator使用して、バックグラウンドスレッドで新しいインポートを作成しました。ここで、インポートが終了したら、バックグラウンドを保存して、ドキュメントのメインスレッドに変更を通知し、それらをマージします。私が理解している限り、これはCoreDataを使用して同時実行を行うことになっている方法です。managedObjectContextNSManagedObjectContextmanagedObjectContextmanagedObjectContext

ただし、呼び出し時にpersistentStoreCoordinatorがない場合があります。これにより、保存が失敗し、アプリがクラッシュします。私は自動保存とすべて(基本的にOS X 10.8ではほとんど変更されていないNSPersistentDocument)を使用しているので、保存方法を気にする必要はなく、「正しく機能する」と思いました。persistentStore[managedObjectContex save:]

どうやら、これはそうではありません。[self autosaveDocumentWithDelegate:self didAutosaveSelector:@selector(document:didAutosave:contextInfo:) contextInfo:nil];ドキュメントサブクラスの最後で呼び出すことによってpersistentStoreが作成されることを期待して、自動保存操作を強制しようとしましたwindowControllerDidLoadNib:が、これは何も変更されていないようです。デリゲートコールバック(- (void)document:(NSDocument *)document didAutosave:(BOOL)didAutosaveSuccessfully contextInfo:(void *)contextInfo)は、実際には自動保存が成功したことを示していますが、fileURLまたは関連するアクセサーのいずれもnil以外のものを返したり、persistentStoreが作成されたりしていません。

自分自身を呼び出すことも考えまし-(BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError *__autoreleasing *)errorたが、通常の自動保存と同じように動作させるためにどのURLを使用すればよいかわかりません。を確認backupFileURLしましたが、の最後fileURLautosavedContentsFileURLはまだすべてゼロですwindowControllerDidLoadNib:。実際のところ、それらは後でゼロにwriteToURL:...なり、configurePersistentStoreCoordinatorForURL:...呼び出されたので、「正しい」URLを取得する方法がわかりません。

いつどのようにpersistentStoreが作成されるかをよりよく理解するために、とにwriteToURL:...ブレークポイントを設定しましたconfigurePersistentStoreCoordinatorForURL:...configurePersistentStoreCoordinatorForURL:アプリケーションが最前線のステータスを失ったときに呼び出されることに気づきました。しかし、新しいドキュメントを作成し、作成直後に何かをインポートしようとすると(最初に別のアプリに切り替えてpersistentStoreを作成せずに)、クラッシュします。別のアプリに切り替えると、ストアが作成され、すべてが正常に機能します。ちなみに、この方法で作成されたpersistentStoreに使用されるURLは、常にtempディレクトリのどこかにあります。

私は何か間違ったことをしていますか?[managedObjectContext save:]を呼び出して、他のmanagedObjectContextに変更を通知する必要はありませんか?ドキュメントに一時的なpersistentStoreを作成させるにはどうすればよいですか?autosaveDocumentWithDelegate:...ドキュメントを実際に保存する(したがって、を作成するpersistentStore)ための呼び出しが行われないのはなぜですか?

関連している: