- ベストアンサー
iOSでxibのoutletを別のxibに繋ぐ方法
- iOSでiPhone向けゲームアプリ作成に挑戦中の初心者です。ゲームアプリをView-based Applicationテンプレートを使って作りはじめました。アプリもほぼ完成し、実機を使ってテストしている段階です。
- AppDelegate.mのapplicationWillResignActiveメソッドに必要な処理を書き、AppDelegate.hにそれに必要なIBOutletを書いたところ、MainWindow.xibにそのOutletがあらわれました。ゲームアプリはViewControler.mに書いてあり、それに必要なIBOutletはViewControler.hに書いてあります。
- AppDelegateのOutletをViewControler.xibで表示されるView上のラベルその他のオブジェクトに結び付けたいのですが、その方法がわかりません。どなたかご存知の方教えて下さい。もしかすると、繋ぐことはできないのかもしれませんが、その場合View-based Applicationテンプレートを使って作り出したアプリにapplicationWillResignActiveメソッドを使って一時中断の処理を書くにはどうしたらいいのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 私が考えた「プログラムコードで処理する方法」は基本的に間違っているのかいないのか教えて下さい。 基本から間違っています。 > 今回のプログラムもいろいろな本を参考にしながら書いたもので、本に書かれていてないことは自分ではできないのです。 Notificationは、Objective-Cのメッセージ送信の基本です。Notificationに関して、説明をしていない書籍はありえません。 もういちど手元にある書籍をすべて、端から端まで読み直してください。(まあ、インデックスからたどれば、ぜんぶ読む必要はありませんが) また、Xcodeのヘルプにアクセスすれば、英文ですが、かならずガイドがあるので、「書かれていないことはできない」はいいわけにしかなりません。(私は、Xcodeのヘルプで検索すれば、すぐにドキュメントがヒットするようなキーワードを散りばめながら、回答をしているんですが、それに気づいていないんですか?) Objective-Cを実践で解説するものだけでなく、言語として解説する書籍が必要かもしれません。 詳解 Objective-C 2.0 荻原 剛志 著 http://www.sbcr.jp/products/4797361780.html > XxxViewController.hとXxxViewController.mに電話がかかってきた時にゲームを中断させるメソッド( - (void) halt; )を書きました。 > XxxAppDelegate.mのapplicationWillResignActiveメソッドにXxxViewController* xxx = [[XxxViewController alloc] init];でインスタンスを作り、[xxx: halt];でメソッドを実行させようとしましたが、'halt undeclared'というエラーが出て、現在先へ進めないでいます。 この間違いをする人が、思いのほか多いようです。 現在ある「XxxViewController」インスタンスとはべつの「XxxViewController」を新規に作成して、それになにかやらしても、意味がありません。
その他の回答 (3)
- xjd
- ベストアンサー率63% (1021/1612)
>私が考えた「プログラムコードで処理する方法」は >基本的に間違っているのかいないのか教えて下さい。 こんにちは。 そもそも、ViewControllerの中で何もかも処理しようとするのが よくありません。 MVC(モデル、ビュー、コントローラー)の考え方を取り入れて、 ゲームデーターを管理する専用のクラスを作って、ViewController から分離してしまいましょう。 そして、そのゲームデータークラスの中で、自分自身をstatic宣言 してreturnで返す初期化クラスメソッドを用意します。 こういう作りにしておけば、他の複数のクラスで、初期化クラス メソッドを何回呼んでも、返ってくるインスタンスは、 最初に初期化したときにできた同じインスタンスを参照している ことになります。 (static宣言されているので。) これで、どんなクラスやビューコントローラからも、 ゲームデータークラスの同じインスタンスのプロパティに アクセスできます。 ご参考まで。
お礼
回答ありがとうございます。 参考にさせていただきます。
- harawo
- ベストアンサー率58% (3742/6450)
Interface Builderで処理するより、プログラムコードで処理するほうが、むしろかんたんでわかりやすいでしょう。 > applicationWillResignActiveメソッドは、私の誤解かもしれませんが、ViewController.mには書けないようなので。 そういう場合は、Notificationを使います。 アプリケーションの動作が中断すると、「UIApplicationWillResignActiveNotification」が、Notification Centerから発信されますから、それをUIViewControllerのサブクラスで受け取ります。
お礼
回答ありがとうございました。 回答を読んで、私もプログラムコードで処理しようと思ったのですが、そこでまたつかえてしまいました。 そのことは「補足」に投稿しました。 お読みいただければ幸いです。
補足
表示を変更するだけでなく、ゲームを中断させなくてはならないので、私もプログラムコードで処理できるのならそのほうがいいと思いますが、その書き方がわからないのです。 呆れられるかもしれませんが、私は、Objective-Cはおろかオブジェクト指向プログラミングそのものがまだよく分かっていないのです。 今回のプログラムもいろいろな本を参考にしながら書いたもので、本に書かれていてないことは自分ではできないのです。 私が考えた、プログラムコードで処理する方法とは次のようなものです。 XxxViewController.hとXxxViewController.mに電話がかかってきた時にゲームを中断させるメソッド( - (void) halt; )を書きました。 XxxAppDelegate.mのapplicationWillResignActiveメソッドにXxxViewController* xxx = [[XxxViewController alloc] init];でインスタンスを作り、[xxx: halt];でメソッドを実行させようとしましたが、'halt undeclared'というエラーが出て、現在先へ進めないでいます。 私が考えた「プログラムコードで処理する方法」は基本的に間違っているのかいないのか教えて下さい。もし基本的に間違っていないのでしたら、エラーが出ないようにするにはどうしたらいいのでしょうか。なるべく具体的に教えていただけると助かります。申し訳ありませんが、こちらは「ど素人」で「常識」というものがないのです。
- SAYKA
- ベストアンサー率34% (944/2776)
applicationWillResignActiveを受け取るオブジェクトにはViewControllerのインスタンスが有る筈だからそこから呼べば良いんじゃない・・・?
お礼
回答ありがとうございました。
お礼
ありがとうございました。 もう一度よく勉強してみます。