重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Cocoaでメインのウィンドウと環境設定のウィンドウを作りたいのですが、
二つの方法を探し当てました。

1.環境設定の為のクラスを用意し、コントローラーがないnibファイルを
  initのNSBundleのloadNibNamed:で読み込みウィンドウを作成する。
2.コントローラーがあるnibファイルをメインのウィンドウから
  loadNibNamed:で読み込み、ウィンドウを作成する。

1の方法だとコントローラーがないため、テーブルビュー等が
使えません。(私の力不足?)
2の方法の場合、環境設定のウィンドウからメインのウィンドウの
変数にアクセスできない(?)為、不便です。

何か良い方法は無いでしょうか??
どなたかご教示、よろしくお願い致します。m(_ _)m

A 回答 (4件)

>あるnibファイルのウィンドウと別のnibファイルの


>コントローラーとを結びつける事はできるのでしょうか?

コントローラでウィンドウを制御?
ウィンドウにコントローラ?

どっちもnibなら それをinitするクラスが居る筈だよね?
そいつが値をやりとりすればいいだけなんじゃ?

必要ならウィンドウやコントローラを継承したクラスを作成して好きな変数を増やしてしまえば良いんだし。
    • good
    • 0
この回答へのお礼

ううん、話が難しくなってきましたね。
一つのクラスで、複数のウィンドウの管理をする方法、解りました。
ちなみにどういう場合にウィンドウをnibファイルで分けるんでしょうか?
メモリの消費量を抑える時でしょうか?

お礼日時:2011/05/16 00:22

> 開かないようにする方法を教えて頂けませんでしょうか?



いいえ、教えません。なぜなら推奨できない方法だからです。
がんばって、どこに出しても笑われないような、りっぱなプログラムを書こうと思いませんか?私は、進歩、成長しようという意欲のある方の力添えになるのは、こちらも気持ちがいいですが、やっつけ仕事でごまかそうというのに力を貸すのは、気持ちがいいものではありません。
    • good
    • 0
この回答へのお礼

という事は、やはり、基本的にWindow一つに対して、nibファイルは一つという事なんですね。Appleの英文の資料を熟読する根性がなくて、よくわかっていません。
ちなみに仕事のプログラムでないので、やっつけ仕事で作るつもりはないですよ。

お礼日時:2011/05/13 19:09

> あるnibファイルのウィンドウと別のnibファイルのコントローラーとを結びつける事はできるのでしょうか?



「結びつける」がどういう意味なのかによりますが、Nibファイルどうしは、互いに独立しているということはいえます。それはオブジェクトは互いに独立しているということに由来します。
Objective-Cに限らず、プログラミングでいちばん気をつけなければいけないのは、あるオブジェクトから、ほかのオブジェクトを参照しようとするとき、そのオブジェクトはバッファされているのか、いないのか、あるいはバッファされていたが、開放されているのかということです。バッファされていないオブジェクト、変数を参照すると、そのとたんにエラーが起き、プログラムが停止します。
Nibファイルで生成するインスタンスは、すべてバッファされていることが前提になるので、そういう心配がいらず、Interface Builderを使った構成は、プログラマの負担を大きく減らしてくれます。反面、なんでもかんでもひとつのNibファイルにインスタンスを詰め込むと、むだにメモリを消費することになり、けっして感心できることではありません。環境設定ウインドウも、「MainMenu.xib」の中に作ってしまえば、いくらでもほかのウインドウのOutletと連結できるので、すごくプログラムが楽になりますが、開く頻度がひじょうに低い環境設定ウインドウを、常時バッファさせておくことは、いいこととはいえません。
あるNibファイルが、ほかのNibファイルのOutletを参照できるようにするということは、両方ともつねにバッファされている状態でなければならないので、おなじくメモリの無駄づかいということになります。
    • good
    • 0
この回答へのお礼

ご丁寧なご回答どうもありがとうございます。

MainMenu.xibの中に環境設定ウィンドウを作れば・・・という事ですが、実は最初はそれがやりたかったのですが、MainMenu.xibの中にウィンドウを複数作ると、起動時に全部のウィンドウが開いてしまいます。
開かないようにする方法を教えて頂けませんでしょうか?

初歩的な質問かもしれませんが、本を見てもインターネットで調べても(日本語のサイトですが)見つける事ができませんでした。

どうぞ、よろしくお願い致します。

お礼日時:2011/05/11 19:18

1


コントローラそのものをメインウィンドウ側で変数として持てばいいんじゃない?

2
delegateを実装するか環境設定側をインスタンス化したときにself(メインウィンドウ)を(環境ウィンドウへ)渡す
    • good
    • 0
この回答へのお礼

ご回答頂きどうもありがとうございます。

その後調べた結果、

1.ウィンドウだけでコントローラーの無いnibファイルを作成する。
2.環境設定の為のクラスを作成する。
3.nibファイルのFile's ownerのカスタムクラスに環境設定のクラスを登録する。
4.環境設定のクラスのinitメソッドでloadNibNamed:によりnibファイルを読み込むようにしておく。
5.メインのクラスで環境設定のクラスのインスタンスを生成する。

という方法で、メインのクラスから環境設定のウィンドウを生成する事が出来ました。

ところで、回答頂いた1についてですが、あるnibファイルのウィンドウと別のnibファイルのコントローラーとを結びつける事はできるのでしょうか?

お礼日時:2011/05/10 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!