Я действительно новичок в программировании на Какао / Obj-C.
У меня довольно простое приложение (целевая платформа Mac OSX 10.5 и 10.6), я занимаюсь системным программированием на C / C ++.
У меня есть главное окно с некоторыми текстовыми полями, кнопками, свойствами и т. Д.Я настраиваю розетки и действия (надеюсь, правильно).Дополнительное окно, объявленное в другом NIB, загружается при нажатии одной из кнопок:
- (IBAction) openSettings: (id) sender
{
ConfigurationWindowController * wc=[[ConfigurationWindowController alloc] initWithWindowNibName:@"Configuration"];
[wc showWindow:self];
}
Загружается новое окно и отображается.
Мне нужно сделать следующие вещи: 1) пройти несколькостроковые параметры второго («дочернего») окна 2) получают эти параметры обратно в главное окно при закрытии второго окна.
Я не уверен, как правильно сделать это в Какао.
@ sergio: Большое спасибо за ваш ответ!В моем «дочернем» окне я сохраняю указатель на главное окно, и перед открытием дочернего окна я передаю несколько параметров:
ConfigurationWindowController * wc=[[ConfigurationWindowController alloc] initWithWindowNibName:@"Configuration"];
mConfigWindow = wc;
[mConfigWindow setValuesToURL:@"some string here" storageParam:@"another string" callerWindowPtr:self];
[wc showWindow:self];
Этот метод успешно вызывается. Я вижу значения, хранящиеся в свойствах экземпляра класса «дочернего» окна.,Однако, когда я пытаюсь присвоить это значение текстовым файлам в методе setValuesToURL, элементы GUI по-прежнему равны нулю, я пытался присвоить сохраненные строки в методе awakeFromNib, но здесь эти свойства равны нулю!,Также значение self указателя отличается - это означает, что объект, созданный initWithWindowNibName и фактическое окно с GUI, отличаются.Очевидно, что сохраненный указатель на «Главное» окно также является нулевым, когда я пытаюсь передать обратно значения.Я подозреваю, что проблема в настройке NIB - действительно смущает меня.Я подозреваю, что это общее недопонимание отношений кода и NIB, я пробовал разные вещи, но все еще не могу заставить его работать.Любое руководство было бы действительно полезным.
-(void) setValuesToURL:(NSString*)strServiceURL storageParam:(NSString*) strStorageURL callerWindowPtr:(AppletAppDelegate *)_callerWindow
{
@try {
NSLog(@"setValuesToURL was called with params %@ , %@" , strServiceURL , strStorageURL);
self.strDataStorageURL = strStorageURL;
self.strServerURL = strServiceURL;
self.callerWindow = _callerWindow;
[textServerURL setStringValue:[self strServerURL]];
[textDataStorageURL setStringValue:[self strDataStorageURL] ];
NSLog(@" after assigmnemnt %@ , %@" , [self strDataStorageURL], [self strServerURL]);
}
@catch (NSException * e) {
NSLog(@"exception inf0 %@ " ,[[ e userInfo] descriptionInStringsFileFormat]);
}
@finally {
}
}
Хорошая новость - теперь строковые значения назначаются объектам NSTextField.У меня есть кнопка в «дочернем» окне, и при щелчке я пытаюсь перезвонить родительскому указателю в окно methid:
- (IBAction) saveConfigurationSetings: (id) sender
{
NSLog(@"saveConfigurationSetings: (id) sender");
//close window and pass back URL strings
self.strServerURL = [textServerURL stringValue];
self.strDataStorageURL = [textDataStorageURL stringValue];
[self.callerWindow passMeBackData: [textServerURL stringValue] strStorageURLParam: [textDataStorageURL stringValue]];
[self close];
}
Здесь переменная callerWindow имеет значение null и passMeBackData завершается ошибкой.Вот объявление в h:
@interface ConfigurationWindowController : NSWindowController {
...
AppletAppDelegate *callerWindow;
...
}
@property (assign) AppletAppDelegate * callerWindow;
в файле m
@synthesize callerWindow;