2013-02-13 3 views
0

В моем AppDelegate методы applicationDidFinishLaunching:Xcode: не SETTITLE работает

// Initialize here 
NSLog(@"Application finished launching..."); 

MyMain* mainAccess;     // To send messages to SAAMain 
mainAccess = [[Main alloc] init]; 

NSLog(@"Setting title..."); 
version = @"v1.0"; 
[mainAccess setTitleVersion:version]; // Set Title with proper version 

Как вы можете видеть, я создал экземпляр моего класса MyMain для того, чтобы отправить сообщение к нему (где всем моим важным «основным» методам расположены). В этом случае я пытаюсь установить заголовок.

Класс My MyMain имеет метод setTitleVersion и принимает параметр NSString в качестве параметра (версии).

NSLog(@"setTitleVersion called"); 

NSString *title = [NSString stringWithFormat:(@"Version: %@", version)]; 
//[_mainWindow setTitle:([NSString stringWithFormat:title])]; 
[_mainWindow setTitle:@"Test"]; 

NSString *mainWindowTitle = _mainWindow.title; 
NSString *test2 = _mainWindow.value; 
NSLog(@"_mainWindow.title: %@\n_mainWindow.value: %@", mainWindowTitle, test2); 

У меня есть выход из главного окна, прикрепленного к этому MyMain классу (как вы можете увидеть _mainWindow).

Я добавил NSLogs, чтобы попытаться отладить себя. И значение, и название возвращаются как null.

Что я делаю неправильно? Метод вызван, как я вижу на выходе консоли. Как будто выход _mainWindow не работает должным образом.

ответ

1

Предположим, у вашего ребенка есть миска с мороженым и требуется вишня сверху. Вы идете в морозильник и выходите из коробки для мороженого. Вы вынимаете миску из шкафа. Вы положили мороженое в миску. Теперь у вас есть миска с мороженым. Вы вынимаете вишню из холодильника и кладете на нее вишню. Затем вы бросаете миску с мороженым (с вишней сверху). Теперь вы сбиты с толку, потому что у чаша вашего ребенка мороженого все еще нет вишни! Что вы сделали неправильно?

Этот сценарий является метафорой вашей проблемы. Вам необходимо отправить сообщение setTitleVersion: в ваш существующий экземпляр MyMain. Вы не можете просто создать совершенно новый экземпляр MyMain, отправить ему сообщение, а затем выбросить этот новый экземпляр.

Ваш ответ на вопрос rdelmar говорит, что ваш существующий экземпляр MyMain находится в вашем главном наконечнике, и у вас есть выход к нему. Я предполагаю, что это означает, что у вас есть розетка типа MyMain на вашем MyAppDelegate и что розетка подключена к объекту MyMain в вашем наконечнике. В этом случае вы хотите отправить сообщение setTitleVersion: на объект в розетке. Если розетка были названы mainObject, вы могли бы сделать это следующим образом:

[self.mainObject setTitleVersion:version]; 

Если вы не создали выход в MyAppDelegate все же, вы можете создать и подключить его в один шаг с помощью редактора помощника Xcode в. Откройте помощник редактора и убедитесь, что он показывает MyAppDelegate.h. Затем управление-перетаскивание из MyMain объекта в бобах в ваш @interface MyAppDelegate, как это:

create and connect new outlet

Если у вас уже есть выход объявлен в вашем MyAppDelegate, вы можете подключить его в редакторе бобов.Щелкните правой кнопкой мыши на заполнителе My App Delegate в списке объектов nib. Тогда в торговых точках Всплывающие, перетаскивание из круга выпускного в к MyMain объекта заполнителю, как это:

connect existing outlet

+0

А я понимаю, о чем вы говорите. Я перетащил объект с панели объектов в основной файл xib и установил его в пользовательский класс Main. Как мне получить доступ к этому? – user1234

+0

Именование класса 'Main' - плохая идея, потому что этот класс должен быть реализован в файле с именем' Main.m'. Поскольку OS X использует файловую систему без учета регистра по умолчанию, это имя файла столкнется с файлом с именем 'main.m', который создается автоматически при создании вашего проекта. –

+0

Ну, у меня есть префикс, добавленный до Main, который я не хотел раскрывать. Я отредактирую его в MyMain. – user1234

0

Вы говорите, что у вас есть IBOutlet для подключения к основному классу, но я немного смущен относительно того, что к чему. Во-первых, вы не подключаете розетки к классам, вы соединяете их с объектами. Трудно сказать по вашему вопросу, но я подозреваю, что проблема заключается в том, что вы создаете один экземпляр Main, mainAccess, в коде, но это не тот случай, когда у вас есть выход в IB.

+0

У меня есть главный объект типа главного класса. Этот Основной объект находится в основном файле xib, где находится главное окно. На выходе используется объект Main. – user1234

+0

Имеет ли ваш основной файл xib также синий куб App Delegate? Если это так, вы должны иметь выход в своем делете приложения и использовать эту розетку, когда вы вызываете setTitleVersion, а не выделяете init другого MAIN-объекта. – rdelmar

+0

Да, в нем есть делегат приложения. Не возникнет ли такая же проблема, если мне когда-нибудь понадобится отправить сообщения по разным причинам? – user1234

Смежные вопросы