После того, как я всегда выполнял монолитные блоки кода из моего объекта AppController, я только что узнал, как модулировать мой код, используя отдельные объекты контроллера модели (так гораздо удобнее и менее запутанно работать с: -))
В моем простом тестовом приложении есть основной AppController и два объекта модели (Model1 и Model2). Я могу успешно передавать данные из AppController в модели, а сами модели могут запускать методы и обрабатывать переданные данные «внутренне», как и предполагалось, - но я не могу заставить их общаться с заштрихованным NSTextField в 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:
Любая помощь / идеи будут высоко ценится. Спасибо: -)