問題タブ [nsdocument]
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.
cocoa - Cocoa アプリのドキュメント関連のアクションはどこに実装する必要がありますか?
基本的にグラフィカルな編集プログラムであるドキュメントベースの Cocoa アプリを作成しています。ユーザーが非モーダル ウィンドウ (インスペクター ウィンドウなど) を表示/非表示にできるようにしたい。これらのウィンドウはメニュー項目から表示/非表示になるため、次のようなアクションを実装するのに「最適な」場所は- (IBAction)toggleInspector:(id)sender
どこですか?
Sketch のサンプル コードでは、これらがアプリ デリゲートに実装されており、ウィンドウ コントローラーのインスタンスもそこに保持されていることがわかりましたが、それは最も「優雅な」場所というよりも、配置するのに便利な場所のように感じます。さらに、このインスペクターはドキュメントが開いているときにのみ関連するためNSWindowController
、アプリよりもドキュメントのメインに関連付ける必要があるように感じます。
objective-c - 開くドキュメントの種類をユーザーに選択させる
Web サイトと Web サービスの 2 つのドキュメント タイプを持つ NSDocument アプリケーションを作成しています。これは私のInfo.plistにあります:
ここで、ユーザーがアプリケーションを開いたとき、メニューバーから [新規] 項目を選択したとき、または開いているウィンドウがないときに Dock アイコンをクリックしたときはいつでも、ドキュメント タイプの 1 つに対応する 2 つのオプションを含むウィンドウを表示したいと考えています。誰でもこれで私を助けることができますか?ありがとう
objective-c - ファイルのビューアのみとなるアプリケーションのサブクラスでNSDocumentの書き込みメソッドをオーバーライドする必要がありますか?
当たり前のことを見逃しているかもしれませんが、よくわかりません。
ドキュメントのNSDocumentのサブクラス化に関するセクションでは、NSDocumentのサブクラスは1つの読み取りメソッドと1つの書き込みメソッドをオーバーライドする必要があると述べています。
何も書き戻さないビューアアプリケーションを作成している場合でも、書き込みメソッドをオーバーライドする必要がありますか(何を返すかnil
?)、それを無視して、呼び出される可能性のある保存メソッドがないことを確認できますか?
objective-c - グローバルhud、Cocoaにデータを送信するための概念的なヘルプ
マルチドキュメントアプリケーションがあります。
これらの各ドキュメントからデータを取得し、データのサブセットを別の画面に配置できるグローバルな「管理」HUDウィンドウにミラーリングしたいと思います。
各ドキュメントインスタンスにHudControllerのグローバルオブジェクトが必要ですか、それともさまざまなドキュメントのすべての情報を独自のインスタンスとしてHudControllerに委任する方法はありますか?
助けてくれてありがとう!
cocoa - NSDocumentサブクラスがNSWindowControllerによって閉じられていませんか?
さて、私はCocoaとObjective-C、そして一般的にOOPにかなり慣れていません。
背景として、ユーザーのドキュメントをパッケージに保存する拡張可能なエディターに取り組んでいます。もちろん、これにはいくつかの問題を回避するための「楽しみ」が必要でした(つまり、バンドル内のすべてのドキュメントNSFileWrapper
を作成しないようにするための、やや卑劣な書き込みと読み込みのプロセス)。私が到達した解決策は、基本的にサブクラスを単なるシェルとしてNSFileWrappers
扱うことでした。それを使用してバンドルのフォルダーを作成し、ドキュメントの実際のコンテンツの書き込みを他のメソッドに渡します。NSDocument
残念ながら、ある時点で私は完全に犬をねじ込んだようです。これがどのように発生したかはわかりませんが、ドキュメントウィンドウを閉じてもドキュメントが解放されなくなりました。ウィンドウが正常に閉じても、ドキュメントオブジェクトは「閉じる」メッセージ(または関連するメッセージ)を受信していないようです。
その結果、アプリを起動し、新しいドキュメントを作成して保存し、閉じてから再度開こうとすると、ドキュメントウィンドウが表示されなくなります。いくつかのクリエイティブなサブクラス化とを使用NSLogging
して、ドキュメントオブジェクトがまだメモリ内にあり、NSDocumentController
インスタンスにアタッチされていることがわかりました。そのため、ドキュメントを開こうとしても、NSDocumentController's
「うーん、現在、そのオブジェクトを開いています」チェックを通過することはありませんでした。
NSWindowController
とインスタンスはありNSDocumentController
ましたが、プロジェクトから完全に削除しました。NSDocument
問題がどこにあるかを見つけるために、ほぼすべての方法をオーバーライドしました。私の知る限り、Interface Builderのバインディングはすべて正しいです。メインメニューの「閉じる」はperformClose:
、ファーストレスポンダーなどにアタッチされています。また、新しいメインメニューとドキュメントxibも試してみました。
バンドルのコードを書くのはおかしいのではないかと思ったので、基本的にすべて削除してゼロから始めましたが、うまくいかなかったようです。メソッドオーバーライドを削除しました-init
が、それも役に立ちませんでした。ここには単純なドキュメントアプリのソースがないため、次の論理的な手順を試しませんでした(readFromUrl
andwriteToUrl
メソッドで既知の動作するコードを私のものに置き換える)。
私はこの問題を約16時間途切れることなくトラブルシューティングしてきましたが、言うまでもなく、私はロープの終わりにいます。理解できない場合は、バンドルドキュメントの混乱に基づいて、より多くのコードと強度を使用して、プロジェクトを最初から試してみるつもりです。
iphone - iPhone の BNRPersistence、および NSDocument
BNRPersistence を iPhone アプリで実行しようとしていますが、解決方法がわからないという問題があります。私はiPhone開発に比較的慣れていないことに注意してください。
問題は、BNRStoreDocument が NSDocument をサブクラス化していることです。NSDocument は Cocoa フレームワークに存在するため、iPhone では使用できません。明らかに、NSDocument が見つからないというコンパイル エラーが発生しています。BNRPersistence の開発者は、iPhone で動作すると述べているので、解決策があると確信していますが、それが何であるかはわかりません。
どんな助けでも大歓迎です!
cocoa - PersistentDocuments を同じウィンドウにロードするにはどうすればよいですか
NSPersistentDocuments を開いて、一度に 1 つずつ同じウィンドウにロードしたいと考えています。私はほとんどそこにいますが、いくつかのステップがありません。うまくいけば、誰かが私を助けることができます。
ハード ドライブにいくつかのドキュメントを保存しています。起動時に、私のアプリは無題の NSPersistentDocument を開き、別の NSWindowController を作成します。ボタンを押してハード ドライブからファイル 1 をロードすると、フィールドにデータが表示されますが、次の 2 つの点が間違っています。
1) データを変更してもドキュメントは汚れません
2) [保存] を選択すると、persistentstore が更新されます (ファイルを再度開くと変更が表示されるため、これはわかっています) が、次のエラーが表示されます: +entityForName: could not locate an NSManagedObjectModel forエンティティ名「本」
無題のドキュメントで最初に起動された WindowController にある私のコードは次のとおりです。このコードは完全ではありません。たとえば、新しいドキュメントを読み込む前に、processPendingChanges を実行して現在のドキュメントを保存する必要があることはわかっています。これは、このハードルを乗り越えるためのテスト コードです。
ありがとう!
objective-c - NSDocument を同時に保存するにはどうすればよいですか?
ドキュメントベースのアプリケーションがあります。ドキュメントの保存には数秒かかることがあるため、ドキュメントをバックグラウンドで保存している間、ユーザーがプログラムを引き続き使用できるようにしたいと考えています。
ドキュメント アーキテクチャが原因で、アプリケーションは一時的な場所に保存するように求められ、その一時ファイルが古いファイルにコピーされます。ただし、これは、一時ファイルをコピーする前に完全に書き込む必要があるため、ファイル保存コードをバックグラウンドで実行して、完了する前に戻ることができないことを意味します。
この一時ファイルの動作を無効にするか、バックグラウンドでのファイル保存を有効にする方法はありますか?
cocoa - 新しいドキュメントを作成または開くときに NSPanel を閉じるにはどうすればよいですか?
ドキュメントベースの Cocoa アプリケーションに取り組んでいます。NSPanel
起動時に、 「新規ドキュメントの作成」や「既存のドキュメントを開く」などの一般的なアクションのボタンを含む「ウェルカム パネル」(タイプ) がユーザーに表示されます。これらのアクションは、[ファイル] メニューの一致する項目と同様に、ファーストレスポンダーのnewDocument:
およびアクションにそれぞれリンクされています。openDocument:
すべてが期待どおりに機能します... 3 つの注意事項があります。
- 新しいドキュメントを作成または開いたときにウェルカム パネルが閉じられません。
- ドキュメント ウィンドウは、作成時にフォーカスがありません。
- 開いているドキュメント ウィンドウでは、開いているファイルがウィンドウのタイトル バーに表示されません。同様に、期待どおりに、「無題」、「無題 2」、「無題 3」などのタイトルで新しいドキュメント ウィンドウが作成されません。(私がこれについて言及しているのは、それが煩わしいという理由だけでなく、何がうまくいかないのかについての洞察をもたらすかもしれないからです.)
アプリケーションコントローラーをウェルカムパネルのデリゲートにすることで、#1を部分的に解決しました。windowDidResignKey:
[既存のドキュメントを開く] ボタンをクリックすると、(ファイル ブラウザー ダイアログが開かれているため) パネルはそのキー ステータスを辞任するので、デリゲートのメソッドでパネルを閉じることができます。ただし、新しいドキュメントを作成するときに、投稿された通知や呼び出されたデリゲート メソッドが見つからないため、新しいドキュメントを作成するときにパネルを閉じる方法がわかりません。そして最終的には、文書ウィンドウが作成されたときにフォーカスを得られないため、#2 は依然として問題です。
サブクラス化しただけNSDocument
です。カスタム ドキュメントやウィンドウ コントローラーはまったく使用していません。また、 の動作が異なる可能性がNSWindow
あると考えて、パネルを に変更してみましたが、同じ問題が発生しています。NSWindow
cocoa - [最近開いた]メニューに、ファイルを指していない項目を追加します
ファイルシステム上に存在するファイルを指していないアイテムを「最近開いた」メニューに追加する方法はありますか?
NSDocumentに基づかないアプリケーションでは、次のコードを使用して[最近開いた]サブメニューに項目を追加できます。
URLがファイルシステムに存在するファイルを指している限り、文書化されたとおりに機能します。
URLがWebURLやカスタムURLスキームなど、システム上のファイルを指していない場合、何も起こりません。
たとえば、このコードは効果がなく、アプリがURLで使用されているスキームを処理している場合でも、実行中にログを生成しません。
更新:誰かが(ずっと前に)このメニューを微調整して、ファイルが存在するかどうかに関係なくファイルを表示する方法を見つけました:http: //lists.apple.com/archives/cocoa-dev/2007/Apr/msg00651.html
NSDocumentControllerをサブクラス化することに成功しましたが、メソッドのオーバーライド-(NSArray *)recentDocumentURLsが呼び出されることはありません。
ドキュメントが言うように、それはそれほど驚くべきことではありません:
このメソッドは、NSDocumentControllerの内部では通常使用されないため、オーバーライドするのに適していません。
しかし、ドキュメントには代わりに何を使用するかが記載されておらず、ポスターには詳細が記載されていません。何か案が?
解決策がない場合、回避策はメニュー全体を最初から書き直すことです。可能であれば、無料で入手できるすべてのものについては、それを避けたいと思います(同じ名前のアイテムが2つある場合など、それらを区別するために親ディレクトリも表示されます)。