問題タブ [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 - 独自のファイル タイプ ポップアップ ボタンに加えて、NSDocument の保存パネルにアクセサリ ビューを追加する
私はNSDocument
複数のファイル タイプに保存できるベース アプリケーションを持っているので、ドキュメントを保存するときに、NSDocument は、ユーザーが保存するタイプを選択できるアクセサリ ビューとして、保存パネルにポップアップ ボタンを便利に追加します。良い。
ここで、保存パネルに含めたい別のビューがありますが、オーバーライドして独自のビューを挿入するために-[NSDocument prepareSavePanel:]
使用-setAccessoryView:
すると、ファイル タイプのポップアップ ボタンが置き換えられるため、自分のビューのみがポップアップボタンではなく、パネルを保存します。
NSDocument
自分のビューとそのファイル タイプ ポップアップの両方を保存パネルに同時に表示する方法はありますか? 既存のアクセサリ ビューを取得し、それを自分のアクセサリと一緒にコンテナ ビューにパッチして、元に戻すことができるように見えますが、それはかなりハックなようで、これを行うためのより良い方法があるかどうか疑問に思っていました。逃した。
macos - NSPersistentDocument でコア データの自動軽量移行を有効にする
ALM は素晴らしいです。しかし、NSDocument で Core Data を使用するプロジェクトでは動作しません。ALM はデフォルトで無効になっているようです。
罰金。通常のプロジェクトでは、次の行で 2 つの適切なオプションを辞書に追加します。
...しかし、NSD で CD を使用する場合、その行は存在しません (NSPersistentDocument は詳細を非表示にし、それらを変更する方法がわかりません)。
次の方法は希望を与えるようです:
...(4 年以上前から) メーリング リストの何人かの人々は、そのメソッドをオーバーライドし、オプション ディクショナリを変更してから、"super" で再度呼び出すことに成功したと報告しています。悲しいことに、それは私にはうまくいきませんでした。同様の問題がある場合は、最初にそれを試すことをお勧めします-それでも機能しない場合は、ここに戻ってください:)
objective-c - 別のxibのMyDocumentに属するNSArrayインスタンスにアクセスするにはどうすればよいですか?
私のドキュメントアプリケーションでは、MyDocument.xibで参照したNSArrayControllerをサブクラス化し、そのコンテンツをFileのOwner.entriesにバインドしました。
エントリは、次のようにMyDocumentクラスの属性として公開するNSArrayです。
これは完全に正常に機能します。良い。
これで、NSWindowControllerを介してNSMenuItemを介して開く別の.xib、CSVEntries.xibを設計しました。これも、スムーズに機能します。
この新しいウィンドウにMyDocument.entriesインスタンスのコンテンツをNSTableViewに表示させる方法がわかりません。
私は多くのことを試しましたが、基本的に問題は、CSVEntries.xibに配置したNSArrayControllerをMyDocument.entriesにバインドできないことです。CVSEntries.xibファイルの所有者がMyDocument以外の何かを参照しています(これは論理的だと思います)。
また、CVSEntries.xibを開くNSWindowControllerにNSArrayインスタンスのコピーを追加しようとしましたが、ユーザーがメニューをクリックしたときにのみウィンドウがインスタンス化されるため、空の配列になってしまいました。
インターネットで検索しましたが、適切な答えが見つかりませんでした。問題に対処する適切な方法を見つけたいと思います。2つのウィンドウが相互に通信でき、共通の親(NSApplicationインスタンス)にアクセスできると確信していますか?
すべての初心者の質問、私は知っています:)
アップデート
私はどこを見るべきかを理解したと思いますが、それでもどのようにすべきかはわかりません。2番目のウィンドウのファイルの所有者がMyDocumentであることを確認する必要があると思いますが、NSWindowController initWithWindowNibName:owner:MyDocumentインスタンスを所有者として指定する方法がわかりません。xibファイルでのみ指定するファイルの所有者は十分ではないようです。
アップデート2
うーん...NSDocumentサブクラス(デフォルトはMyDocument)によって両方ともインスタンス化された2つのNSWindowControllerインスタンスが必要だと思い始めています。これらを配置すると、NSWindowControllerの両方がMyDocument.entries NSArrayにアクセスできるようになり、2つのwindowsxibファイルをFileのOwner.entriesにバインドできるようになります。
誰かがこれを確認できますか?ありがとう。
objective-c - NSWindowController は初期化時にウィンドウを非表示にしていませんか?
2 つの異なる xib に対応する 2 つの NSWindowControllers を持つ NSDocument サブクラスがあります。
Document-Based Application Guide に従って、document.m 実装に以下を追加しました。
問題は、2 番目のウィンドウ コントローラー csvWindowController で最初にそのウィンドウを非表示にすることです。後でウィンドウの同じインスタンスを表示します。そうするために私は書いた:
しかし、ウィンドウはそこにあり、現れています。
VisibleAtLaunch にフラグが立てられていないこと、コンソールにメッセージが正しく表示されていること、および変更しても次のことをしないでください。
結果は同じで、ウィンドウが表示されます。
どんな助けでも大歓迎です、ありがとう:)
objective-c - applicationShouldOpenUntitledFile は NO を返しますが、アプリはまだ空白のドキュメントを開きます
ドキュメントベースのアプリケーションが起動時に空のドキュメントを表示するのを止める方法がよくわかりません。
私が投稿した以前の質問で、誰かが「ウィンドウ デリゲートが正しく設定されていると確信していますnil
か?」と言いました。
誰かが詳しく説明できますか?MyDocument nib の Window オブジェクトは、デフォルトで File's Owner/Delegate に関連付けられているようです。他に何をする必要がありますか? 現状では機能していません。
このメソッドは、プロジェクト構造の MyDocument.m にあります。追加のコードが必要ですか?
objective-c - 複数のNSWindowController間でNSDocumentサブクラスを共有する
現在、ドキュメントベースのアプリケーションではないアプリケーションがあります(その価値よりも厄介だと思ったため)。しかし、今はそれだけの価値があるのではないかと思っていましたが、まだ解決していない問題が1つあります。NSDocument
複数のウィンドウ間でサブクラスを共有します。
では、のサブクラスをNSDocument
1つNSWindowController
に関連付ける必要がありますか、それとも複数のウィンドウ間でこれらを共有できますか?私が尋ねる理由は、アプリケーションファイルが100MiB(またはそれ以上)になる可能性があり、ユーザーが同じファイルを複数のウィンドウで開く可能性もあるためです。また、これらのファイルの処理には比較的長い時間がかかるため、複数のウィンドウが同じファイルにアクセスできるようにするNSDocument
と便利です。また、ファイルは大量のデータで非常に迅速に更新されるため、同じドキュメントの複数のインスタンスを同期すると、多くのCPU時間が使用されます。
誰かがこれを行ったことがありますか、それともドキュメントベースのアプリケーションで行うことができますか?このトピックに関するアドバイスは大歓迎です。
cocoa - ドキュメント ベースのアプリケーションでは、ドキュメントはファイルを表す必要がありますか?
私のプログラムが Cocoa のドキュメント フレームワークを使用することでメリットが得られると約 90% 確信していますが、確信が持てないことが 1 つあります。
私が見たすべての例で、 NSDocument サブクラスは常に保存されているファイルを表しており、これは私のアプリケーションに完全に適しているわけではありません。
アプリケーションでディスクに保存されるファイルは、プログラム内で編集されるエンティティのコレクションになります。新しいファイルが作成されると、ユーザーはそのコレクションに含まれる個々のエンティティを編集できます。これには、状態と変更の追跡 (保存、元に戻すなど) が必要です。
ドキュメント ベースのアプリケーションはこのように機能するのでしょうか?それとも、常にフレームワークと戦わなければならないのでしょうか?
私の質問をより明確にするために更新されました:
ファイル内に含まれる個別のエンティティを管理しやすくするため、ファイルをバンドルとして保存することを計画していましたが、私の質問には実際には対応していません。
Microsoft Access のようなプログラムを考えてみてください。ファイルはデータベースですが、ドキュメントはフォーム、レポート、クエリ、マクロなどです。各アイテムは個別のドキュメント ウィンドウで編集され、個々のドキュメントに対して変更を保存または元に戻すことができますが、保存されるのはデータベース全体(すべてのフォーム、レポート、およびクエリを含む) です。
cocoa - 開いたときにすべての NSDocument ウィンドウを前面に表示
ほとんどのシステムでは、「新しいウィンドウを開く」のデフォルトの動作は、前面に表示されることです。これは Cocoa では発生しません。私は、この標準的な動作を行うための「正しい」方法を見つけようとしています。私が試したほとんどのことは、最大1 つのウィンドウでしか機能しません。
起動時に複数のウィンドウを開く必要があります。
- (N x NSDocuments (それぞれ 1 つのウィンドウ)
- NIB ファイルを開くシンプルな NSWindowController x 1。
機能しないもの:
- 開きたいすべての NSDocuments を繰り返し処理し、それらを開きます。
何が起こるのですか?... open を呼び出す「最後の」ものだけが前面に表示されます。残りは、すばやく切り替えるか、[ウィンドウ] メニューを使用してそれらを見つけるまで、非表示になり、画面のどこにも表示されません。
コード:
- ウィンドウを開いた後、各ウィンドウで「makeKeyAndOrderFront」を手動で呼び出す
何が起こるのですか?違いはありません。しかし、NSWindow インスタンスを取得するために私が見つけた唯一の方法は、非常にハックであり、完全に間違っているようです (ただし、いくつかのブログやメーリング リストの投稿で言及されています)。
コード:
...私はこれが間違っていることを知っていますが、なぜ/何を別の方法で行うべきかわかりません:(。
通常は機能しますが、常に機能するとは限りません。
- 上記と同じですが、代わりに「showWindow」を使用してください (これは NSDocument ガイドから取得しました)。
奇妙なことに、Apple が内部的に呼び出していると主張している正確なコードであるにもかかわらず、これは時々機能します。彼らが内部的に呼び出している場合、既に呼び出した後に再度呼び出すと、なぜ異なる動作をするのでしょうか?
cocoa - 別のクラスで IBAction を呼び出す
私の文書ベースのアプリケーションには、テーブルビューを持つウィンドウがあります。tableview には、NSMutableArray (aHopBill) と必要な tableview メソッドを含む NSObject (HopBill と呼ばれる) 型のクラスを指すデータソースがあります。ここまでは順調ですね。
テーブルビューに行を追加するために、NSWindowController (HopBillSheetController と呼ばれる) から制御されるシートを追加しました。シートのOKボタンを押したとき。実際には 2 つの IBActions を実行する必要があります (これは不可能です): tableview の配列に行を追加し、シートを閉じます。シートの OK ボタンを NSWindowController に接続する (シートを閉じる) か、NSObject に接続する (配列に行を追加する) ことができます。しかし、私は両方が欲しい:-)
NSObject から NSWindowController の IBAction を呼び出すことは可能ですか? または、これを行う別の方法はありますか?
私は Cocao と Objective-C の初心者なので、お手柔らかにお願いします :-)
cocoa - 小さな IDE のための Cocoa アーキテクチャのアドバイス
私は、Mac OSX Snow Leopard でマイクロコントローラーをプログラミングするための単純な Cocoa IDE を開発するという個人的なプロジェクトに着手しました。プログラミングは問題ではないので、アプリケーションの高レベル ブロックを設計するためのアーキテクチャを選択するのに多少の困難があります。私は考えていました:
- ユーザーが新しいプロジェクトを作成するときに XCode が行うことと同様に、プロジェクトの詳細を設定する可能性があります。おそらく、ユーザーのデフォルトまたは plist に保存される可能性のあるプロジェクトの詳細のアクセサリ ビューを含める可能性があります。
- アプリが所有する特定の拡張子を持つカスタムの特定のファイルタイプでプロジェクトを保存する可能性があります (ドキュメントベースのアプリ)。
- プロジェクトに新しいファイルを追加する可能性があります。特に、コンパイルのために自動的に含まれる h ファイル ヘッダーです。新しいファイルを選択するときに、ファイルの種類を選択できるようにする (XCode と同様)。
- たとえば、構文の色分け、チェック、強調表示のない、テキストビューベースのシンプルなエディターを用意します。
NSScanner
ただし、たとえば、 を介して、構文の色付け/チェックの将来の開発を可能にするような方法で設計する。 - 選択した永続化方法に基づいて、コンパイル用の Makefile を自動生成する可能性があります。
stdout
または他のより良いアプローチ を介して、コンパイラの冗長性をログ ビュー (テキスト ビュー?) に記録する可能性があります。NSOutlineView
ファイルの参照にツリー コントローラー (たとえば) を使用する (左側のペインにある XCode のプロジェクト ファイルと同様) 。- たとえば、プロジェクトをフォルダーのようなプロジェクト ファイルにパッケージ化します
NSFileWrapper
(これには、main.c ファイル、追加のヘッダー、自動生成された Makefile、プロジェクト設定の plist などが含まれます); - アプリケーション共有シングルトンを介してプロジェクト設定とアプリケーション設定を使用して設定を永続
NSUserDefaults
化する (たとえば)。 - モデル コンポーネントのいくつかのクラスを使用してマイクロコード コンパイラに接続し、
NSTask
コンパイルとアップロードの結果をログ テキスト ビューに表示します。 - 等
私よりもはるかに経験豊富な方がそのようなプロジェクトに着手するとしたら、どのアーキテクチャ コンポーネントを選択しますか? 同じ (分割ビュー、テキスト ビュー、NSTask
ファイル ラッパー、ツリー コントローラーを使用したアウトライン ビュー、ドキュメントからアプリ デリゲートを分離し、ドキュメント コントローラーの共有インスタンスなど)、または別のアプローチを選択しますか? はるかに単純なものですか?
これに関するヒントをいただければ幸いです。お時間をいただきありがとうございます。興味のある方がいらっしゃいましたら、進捗状況をお知らせします。