問題タブ [cocoa-sheet]
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.
objective-c - クラス メソッドで作成されたインスタンスの有効期間を管理するためのより良い方法
私が書いているペット アプリケーションでは、メイン ウィンドウにいくつかのカスタム ビューが配置されており、それぞれにラベル、コンボボックス、ボタンがあります。
ボタンをクリックすると、同じビューでコンボボックスを見つけるコードが呼び出され、次の関数 ( のクラス メソッドRVListEditorController
)が呼び出されます。
このコードは のインスタンスを作成しますRVListEditorController
。これは、コンボボックスのリストを編集できるパネルを制御します (アイテムの削除、アイテムの並べ替えなど)。他のコントロールの中でも、閉じるための 2 つのボタンがあります。[キャンセル] と [OK] です。
2 つのボタンのコードは次のとおりです。
これらは、シートを閉じる 2 つのボタンのみです。私の質問は、インスタンスの有効期間管理についてです。これはクラス メソッドで割り当てられますが、制御は再び Cocoa に渡され、クラス メソッドは終了します。インスタンスを解放するために見つけた唯一の場所は、閉じるボタンの 2 つのハンドラーです。私の問題は、beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
単にシートを開いてから再び閉じるまで待って、閉じた方法の値を返すことではありません。その場合は、クラス メソッドでインスタンスを閉じることができ、気分が良くなります。
私の質問: インスタンスの有効期間を処理するためのより良い方法はありますか、それともシート ウィンドウをモーダルに開き、再び閉じるのを待つことができる Cocoa の何かがあるので、すぐにインスタンスを解放することができます。それ?何も思い浮かびませんが、結局のところ、私は比較的初心者です。
FWIW、コードは機能するので、エラーはありません。クラス メソッドに何かを割り当ててから、それ自体の 2 つのインスタンス メソッドで解放する必要があるという構造には、単純に満足できません。
macos - Cocoaデスクトップでこのようにビューを表示するにはどうすればよいですか?
私はアプリをやっていて、どうすればこのようなビューを表示できるのだろうと思っていました。
objective-c - NSApp beginSheet は非常に簡単にシートを作成してから消えます
[NSApp beginSheet]
は次のように使用されます。
実行すると、シートは一瞬表示されますが、通常のシートのようにウィンドウに取り付けられていないため、浮いており、その後消えます。 [NSApp mainWindow]
ではないことを確認しておりますnil
。例外は発生しません。この動作の原因を誰かが提案できますか?
私は既存のプロジェクトに追加しており、このウィンドウで動作する他のシート コントローラーの構造と作成を模倣しようとしています。
macos - beginSheetメソッドが機能しません
私はsaveWindowController
(NSWindowControllerサブクラスオブジェクト)を持っています。私はinitWithWindowNibName:
メソッドを使用してコントローラーを初期化します。
xibのファイルの所有者をに設定しましたSaveWindowController
。delegate
xibファイルで(ウィンドウから)ファイルの所有者に接続し、 window
(コントローラーから)NSWindowに接続します。
このメソッドを実行した後、タイトルバーのないモーダルウィンドウが表示され、通常のシートとは異なります。最初のウィンドウの左下隅に表示されます。
私が間違っていることを助けてくれませんか?
cocoa - ARCを使用したXcode4(OSX 10.7.2)でのCocoaウィンドウのシートとしての表示
ログインウィンドウをメインウィンドウからシートとして表示しようとしていますが、AppKitメソッドを実装しようとすると、さまざまな区別できない理由で常にエラーが表示されます。
そこにあるオンラインガイドはどれも機能していません。コード/適応クラスを自分のプロジェクトに適用すると、機能しません。
Appleのドキュメントを含め、ほとんどのガイドはかなり古くなっています。そして、それらのどれも自動参照カウントと互換性がないようです。またはXcode4インターフェース。
メインウィンドウでボタンを押した後にシートを表示する最も簡単な方法について、誰かが私のために完全なガイドを詳しく説明できるでしょうか。
必要に応じて、詳細についてお気軽にお問い合わせください。
objective-c - beginSheet: ARC で代替をブロックしますか?
Mike Ash は、ブロックを使用してシートからのコールバックを処理する例を作成しました。これは非常に良さそうです。これは、beginSheet の別の SO の質問で、ユーザー Enchilada によるガベージ コレクションで動作するように更新されました: block alternative? 、 下記参照。
GC を有効にすると、これは自動参照カウント (ARC) では機能しません。ARCとブロックの両方の初心者である私自身は、それを機能させることができません。ARC で動作するようにするには、コードをどのように変更すればよいですか?
Block_release() を削除する必要があることはわかりましたが、「void *」から「void (^)(NSInteger)」へのキャストが ARC で許可されていないというコンパイル エラーを回避できません。
objective-c - シートウィンドウのNSTimerが起動しない
パネル内に毎秒起動しようとしているタイマーがありますが、起動できないようです。私は次のようにパネルを作成しています:
次に、私の targetController には次のものがあります。
私の理解では、タイマーを に追加することでこれを正しく行っていますがNSModalPanelRunLoopMode
、そうしても updateDisplay: セレクターは起動しません。
ここで私が間違っていることについて何か考えがある人はいますか?
注:私も試しNSDefaultRunLoopMode
ましたが、違いはありませんでした。タイマーはまだ起動されていません。
編集:私の全体的な目標は次のとおりです-
私のパネルには、(複数のスレッドから) 一度に多くの項目を追加できるテーブル ビューがあります。そのため、アイテムを一時配列に追加し、タイマーが起動すると、一時配列からメイン配列にアイテムを追加し、テーブルをリロードします。以下は、これを行うコードのサンプルです。
そして、タイマーが更新されたときに起動するメソッド:
残念ながら、タイマーが起動しないと、テーブルにエントリがまったくありません。
以下は、まさに私がやろうとしていることのスクリーンショットです (エントリはメイン配列に直接追加されています)。
objective-c - カスタムモーダルダイアログとバックグラウンド操作
一連のビューを備えたカスタムモーダルダイアログとして実装した、カスタムのマルチステップアカウント設定を備えたCocoaアプリがあります。
問題は、バックグラウンド操作(URLのフェッチ)がスタックしているように見えることです。これは、アプリケーションがモーダルモードになっているためだと思います。
モーダルダイアログを開始するコードは次のとおりです。
まず第一に、私の仮定は正しいですか?アプリケーションがモーダルで実行されている場合でも、バックグラウンド操作を続行する方法はありますか?
実際のバックグラウンド操作は私の管理下にはありません。これは、完了ブロックを取得する外部APIです。
cocoa - cocoa beginSheet:エラーをスローするdidEndSelector
メインの.xibにシートを読み込んでいます。シートはパネルであり、シートの表示や閉じに問題はありませんが、閉じるとエラーメッセージが表示されます。
これが私のコードです:
macos - シートが開いているかどうかを確認する
Cocoa アプリを作成していますが、基本的にウィンドウがあり、別のウィンドウを開く前にシートが開いているかどうかを確認する必要があります。Googleはそれを知らないようです。シートが開いているかどうかを確認するにはどうすればよいですか?