AppControllerオブジェクト内から常にモノリシックなコードブロックを実行した後、個別のモデルコントローラーオブジェクトを使用してコードをモジュール化する方法を学びました(非常にすっきりしていて、操作の混乱が少なくなります:-))
私の単純なテストアプリには、メインのAppControllerと2つのモデルオブジェクト(Model1とModel2)があります。AppControllerからモデルにデータを正常に渡すことができ、モデル自体がメソッドを実行し、渡されたデータを意図したとおりに「内部的に」処理できますが、 UI。これが私のコードの関連部分です:
AppController.mで#import"AppController.h"
@implementation AppController
- (IBAction)passObjectsToModelController:(id)sender
{
NSString *stringToPass = @"Hello from Model2 :-)";
int numToPass=12345;
Model2 *ObjController2 = [[Model2 alloc]initWithStuff:stringToPass:numToPass];
[ObjController2 release];
}
@end
... Model2.h #import
@interface Model2 : NSObject
{
IBOutlet NSTextField *passedStringField;
}
- (id)initWithStuff:(NSString*)passedString :(int)passedNum;
@end
...そして最後にModel2.mで#import"Model2.h"
@implementation Model2
- (id)initWithStuff:(NSString*)passedString :(int)passedNum
{
if(self = [super init])
{
NSLog(@"now inside 'Model2' controller...");
NSLog(@"the passed string reads: %@",passedString); //••• this works •••
NSLog(@"the passed number is:%d",passedNum); //••• this works •••
[passedStringField setStringValue:passedString]; //••• WTF!!... this DOESN'T work! •••
// do something internally with passedNum here...
}
return self;
}
@end
両方のモデルオブジェクトには共通のNSTextFieldへのアウトレットがあり、両方のオブジェクトからフィールドにコントロールドラッグして接続しました。私のAppControllerはNSTextFieldについて知りません (そして私は、知りたくもないと思います)。コントローラオブジェクトとモデルオブジェクトの間にIB接続は確立されていません。
NSLogは、モデルオブジェクトが作成されており、渡された値がそこまで到達していることを示していますが、そこからGUIウィンドウのテキストフィールドには到達していません。コンパイラのエラーや警告は表示されません。ある種の「setTarget:」呼び出しが欠落しているのでしょうか?
任意のヘルプ/アイデアをいただければ幸いです。ありがとう :-)