07/11/20 12:18:19 xK/rJZ3Z0
>>662
File's Owner はその NIB を開いた際にプログラム側から nib's owner として登録されたオブジェクトになる。
MainMenu.nib は自動的に NSApp が開いて、File's Owner は NSApp。
ドキュメント型ソフトのばあいは、NSDocument が nib を開くので、
File's Owner は自分でつくった NSDocument のサブクラスになる。
それ以外に nib をつくって、自分でプログラムからあからさまに開く際は
File's Owner を自分で設定する。
668:662
07/11/20 19:03:19 vX1nP8Nx0
>>667
なるほど!っていうか初めてFile's Ownerの
役割が分かりますた。
簡潔且つ的確なご説明ありがとうございます。
669:名称未設定
07/11/21 20:17:19 G817xlPC0
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
の中でmenuItemに対してsetState:とかtagを呼ぶと
'tag' not found in protocol(s)
とか言われてしまうんだけどなんでだろう?
670:名称未設定
07/11/21 22:56:41 sg+XtEJO0
知らんけど、NSMenuItemがプロトコルだからじゃね?
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;//引数menuItemはNSMenuItemプロトコル
- (BOOL)validateMenuItem:(NSMenuItem*)menuItem;//引数menuItemはNSMenuItemクラス
って事かなー。
671:名称未設定
07/11/21 23:17:07 hTxVVTev0
>>669
まずヘッダを確認してみてはいかがでしょう。
ウチのxCode2.4ではdeprecatedだけど一応使えるみたい。
672:名称未設定
07/11/22 00:53:05 NI+W3MNs0
ありゃ、プロトコル自体がdeprecatedだったのか
警告が「プロトコルの中にないよ」って書いてあるもんだから、
NSMenuItemプロトコルの中を見てちゃんとあるのに変だな~と混乱してた
失礼しました
結局>>670みたいに書き直しなさいということね
673:名称未設定
07/11/22 11:59:27 Krn36QQ60
質問です。
まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
ここでMyWindowにinitWithContentRect:をオーバライドして、
中で[super initWithContentRect:...]と典型的な初期化をしているのですが
この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。
IBでAutosizingを設定しても聞いてくれなくて。
674:名称未設定
07/11/22 17:12:56 kaRw/iTz0
行を選択するたびにそのイベンオをとらえて処理をしたいと考えてます。
- (IBAction)tableViewSelected:(id)sender
{
row = [sender selectedRow];
NSLog(@"the user just clicked on row %d", row);
}
そこで,上記では行を選択すると選択した行番号を得られるのですが,
行番号ではなくオブジェクトを得られる方法はありますか?
IBAction はCore Dataで作ったTableViewとAppDelegateでつないであります。
なので、クリックされた行のNSManagedObjectが得られるといいのですが,
直接的な方法はないものかと。
675:名称未設定
07/11/22 21:10:09 a/peNeZj0
NSArrayController 使って bind させればいいんじゃないの?
676:名称未設定
07/11/22 22:03:28 GA2XBdAS0
> まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
> ここでMyWindowにinitWithContentRect:をオーバライドして、
> 中で[super initWithContentRect:...]と典型的な初期化をしているのですが
> この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。
状況がいまいちよく分からないが、
MyWindowの上にMyViewが乗ってるっていうのは、IBで乗せてるの?
ならば、nibファイルからMyWindowが生成されるので、初期化にはinitWithCoder:が使われるはず。
initWithContentRect:でMyWindowを生成しているなら、手動でMyViewを乗せることになるはず、
IBでAutosizingを設定っていうのも、ちょっと変な気が。
677:名称未設定
07/11/22 22:22:26 Krn36QQ60
>>676
IBでMyWindowにMyViewを乗せています。
@implementation MyWindow
- (id) initWithContentRect: ...
{ NSWindow* w = [super initWithContentRect: ...]; return w; }
@end
のような記述をしていて、このときMyViewは手動で乗せなくても表示されています。
また、Autosizingでウィンドウに合うようにMyViewを―~~―な状態にしておけば、
ユーザがGUI上でリサイズをしてもMyViewのサイズが変わっています。
表示した後マウスでリサイズする分には問題が無いわけですが、
上記initWithContentRect:の中で任意のrectを指示した時に
初期のMyViewのサイズがIBで指示したサイズになってしまうのです。
これは手動でMyViewを生成するべきなのでしょうか?
678:名称未設定
07/11/22 23:50:05 T7a7mhhK0
>>677
awakeFromNibで設定するのが簡単だと思う。
679:名称未設定
07/11/23 00:34:54 1Oijf2vw0
>>677
IBでインスタンス化したオブジェクトはアーカイブされてnibファイルに格納されて
プログラムで読み込むときはアンアーカイブして取り出すので
初期化メソッドはプログラム中では呼ばれない
はず
nib上のオブジェクトを初期化するにはawakeFromNibを使いましょう
680:674
07/11/23 10:22:00 GeUHqHT60
>>675
どうも
NSArrayControllerを使ってBindするというのは、
具体的にはどうすればいいのですか?
NSArrayControllerのインスペクタのBindをみても
NSTableViewのクリック関する項目はないのですが。
681:名称未設定
07/11/23 10:49:36 hcJ8Hx2n0
NSTableView の binding のところで、中身を
NSArrayController の content とかに設定して、
NSArrayController のほうを CoreData につないでください。
ADC のどっかにチュートリアルがあったはず。
682:675
07/11/23 12:06:28 gHJ1tYgX0
>>680
行の選択が変化したかどうかは KVO で見る
NSArrayController の例えば selectionIndex とかを addObserver で登録して、
observeValueForKeyPath の中で、そのときに NSArrayController に
選択されている NSManagedObject を取り出す
683:674
07/11/23 12:37:53 GeUHqHT60
>>682
>>681
素早い応答ありがとうございました。
ADCのチュートリアルを教えてください。
Core Data Programming Guideをみたり
table view bind で検索しましたが,
それらしいものが見つからなくって。
まだまだ初心者なので,インスペクタの設定や
サンプルコードがないとピンとこなくて。
すいません。
もしサンプルプロジェクトをダウンロードできるサイトがあったら
教えてください。
684:名称未設定
07/11/23 12:51:39 hcJ8Hx2n0
英語だけど、apple のこれ
URLリンク(developer.apple.com)
はビデオ付き。まさに tableview につないでるから。
あと、Scott Stevenson の
URLリンク(cocoadevcentral.com)
もわかりやすい。
というかそこの記事はどれもこれもわかりやすいので、おすすめ。
あと、mkino さんのところにも解説ありそうだけど、どうでしょう?
すくなくとも本の第三版にはのってるらしいけど、持ってないのでわからん。
685:名称未設定
07/11/23 13:02:19 iA/8JIe10
binding ってバカを量産する仕組みなんだろうか
686:675
07/11/23 13:08:18 gHJ1tYgX0
>>683
table view の bind じゃないです
MVC のパターンにして
M: Core Data
V: NSTableView
C: NSArrayController
で、それらの間を binding で結んで、table の変化を見るのではなくて
NSArrayController の selection の変化を見る、ということ
で、NSArrayController の selection の変化は key value observing で見る
アプリケーション本体の方には NSTableView ではなく
NSArrayController の方をつないで、そこに選択されている
NSManagedObject を取り出せば、それが NSTableView で
選択されている NSManagedObject と同じものになります
サンプルコードはわからないけど、ドキュメントなら、
Core Data Programming Guide 以外なら
Cocoa Bindings
URLリンク(developer.apple.com)
Key Value Observing
URLリンク(developer.apple.com)
とか
687:名称未設定
07/11/23 15:23:08 NQ+7IO3Q0
>>685
自分の頭の中のCocoaはbindingが導入される前で止まってるw
未だに使った事が無い恐がりの俺
688:名称未設定
07/11/23 15:40:43 vBC4oFan0
bindingとpropertyは職業プログラマ用だろ。
garbage collectionは量産しそうだけど、いいんでない?
689:名称未設定
07/11/23 16:07:53 hcJ8Hx2n0
>>687
binding は Panther で追加された頃は IB での扱いがひどかったけど、
(設定しても反映されない等、)最近は随分安定している気がする。
690:名称未設定
07/11/23 16:08:47 40+P0Y410
>>688
いや、Bindingだけは素人でもきちんと使えるようにすべき
MVC、KVCできちんと書けるようになるからな
691:名称未設定
07/11/23 17:45:45 /aNuome90
メモリ管理をあまり理解しないまま、KVCを使っていると知らない間に
大量のメモリリークを生みだしそうな気がする
まあ、GC前提なら問題ないけどね
692:名称未設定
07/11/23 19:05:51 gj7dOudc0
>>689
俺未だにPanther使ってるけど、そんなことないぞ。