私はapplicationDidFinishLaunching:を私のココアデリゲートに組み込みたいと思います。どうすればいい? iphone SDKのapplicationDidFinishLaunchingはすでにアプリケーションデリゲートに入っていますが、私のMacアプリケーションを作成するときには何も見つからなかったことに気付きました。アプリケーションデリゲート - ココア
よろしく、
ケビン
私はapplicationDidFinishLaunching:を私のココアデリゲートに組み込みたいと思います。どうすればいい? iphone SDKのapplicationDidFinishLaunchingはすでにアプリケーションデリゲートに入っていますが、私のMacアプリケーションを作成するときには何も見つからなかったことに気付きました。アプリケーションデリゲート - ココア
よろしく、
ケビン
- (id)init
{
if (self = super init]) {
[NSApp setDelegate:self];
}
return self;
}
ます。また、Interface Builderでこれを行うことができます。 MainMenu.xibの "File's Owner"から "delegate"コンセントをオブジェクトにドラッグするだけです。ただし、代わりに-awakeFromNib
を使用することを検討することをお勧めします。
Xcode 3.2以降、Macアプリケーションテンプレートには、すでに接続されているアプリケーションデリゲートも付属しています。
Xcode 3.2より前に作成されたプロジェクトでこれを設定するには、デリゲートがインスタンスになるように新しいクラスを作成します。私は通常、私の名前を「AppDelegate」と呼んでいます。これを行うには、Classesグループを右クリックし、 "Add File"を選択してから、Cocoa NSObject Subclassファイルテンプレートを選択します。
作成したヘッダー(AppDelegate.h)を開きます。必要なインスタンス変数を与えます。そして、相手に行く。これにより、実装ファイル(AppDelegate.m)が表示されます。ここにapplicationDidFinishLaunching:
インスタンスメソッドを追加してください。 iPhoneとは異なり、これは通知ハンドラメソッドなので、NSApplicationインスタンスではなくNSNotificationインスタンスを受け取ります。
今すぐ接続してください。 Resourcesグループで、MainMenu.nibを開きます。オブジェクトをLibraryウィンドウから最上位のnibウィンドウ(File's OwnerやFirst Responderなどのアイコンがあるウィンドウ)にドラッグします。作成したオブジェクトを選択し、IDインスペクタを開きます。 Xcodeで使用した名前と一致するオブジェクトのクラスをAppDelegateに設定します。ファイルの所有者を右クリックして、そのコンセントから新しいオブジェクトにドラッグします(delegate
)。
Xcodeで、applicationDidFinishLaunching:
メソッドにNSLogステートメントを追加します。すべてを保存し、次にビルドして行きます。 Xcodeに戻り、デバッガコンソールを開きます。あなたがすべてのことを正しく行い、何も忘れなかったら、そこにログメッセージが表示されるはずです。
'Macアプリケーションテンプレートには、すでに接続されているアプリケーションデリゲートが付属しています。このようなメソッドがあります.'ドキュメントベースのアプリケーションではありません... – zakdances
@yourfriendzak:良い点。ドキュメントベースのアプリケーションに何らかの理由でアプリケーションデリゲートを追加する場合は、残りの手順に従う必要があります。 –
アプリケーションデリゲートファイルが完全に見つかりませんでしたか?最新のプロジェクトテンプレートを誤ったフォルダにインストールするXcodeインストールスクリプト(少なくともSnow Leopardの3.2.1用)にバグがあるようです。 "Cocoa Application"プロジェクトの古いテンプレートにはデリゲートファイルが含まれていません。
Fixing the Xcode Project Templatesというブログ記事で私が発見したこと(そしてそれを「修正」した方法)について説明しました。
乾杯、 グラハム
あなたはスーパーinit' '周りの角度ブラケットが欠落している、あなたはメソッド' applicationDidFinishLaunchingことを言及していない: 'それを動作させるためにssameクラスによって実装されなければなりません。 – MKroehnert