2014-11-04 1 views
0

У меня есть три наконечника и класс SetupController. В построителе интерфейса все перья имеют владельца файла, установленного в «SetupController».Несколько наконечников, несколько IBOutlets, один контроллер. Получение нераспознанного селектора?

В заголовочном файле SetupController У меня есть

@property (strong) IBOutlet NSTextField *label;  //Nib one (Created with SetupController) 
@property (strong) IBOutlet NSTextField *label2; //Nib three 

В файле м у меня есть:

@implementation SetupController 

@synthesize label = _label; 
@synthesize label2 = _label2; 

Теперь, когда я пытаюсь обновить NSTextField из Метка2, используя [_label2 setStringValue: @ "String "], Ничего не произошло. Открытие debug Я вижу, что _label2 имеет значение null, но _label - нет.

Второй и третий перья (которые я не могу обновить) загружаются в ViewController с помощью initWithNibName: @ "NIB" bundle: nil;

Не загружает ли загрузочные наконечники должным образом розетки? Поскольку экземпляры создаются в SetupController, и я загружаю новое представление в качестве нового ViewController, не загружаются ли они должным образом?

Спасибо всем!

+0

Несколько заметок. Во-первых, вам больше не нужны директивы '@ synthesize'. Они (почти) никогда не нужны. Во-вторых, вы обычно хотите объявлять свойства 'IBOutlet' как' (слабые, неатомические) '. В-третьих, убедитесь, что 'label2' подключен к допустимому текстовому полю в вашем построителе интерфейса. – ravron

ответ

1

Если эти объявления @property находятся в классе владельца файла как для Nib, так и для трех, а тот же экземпляр этого класса загружает оба ножа, то, возможно, они оба могут быть не ноль. То есть, однако, уловка-22, поскольку вы говорите, что используете функцию init в подклассе NSViewController для загрузки nib. И каждый VC может быть только один раз инициализирован и управлять только одним видом, а не двумя.

Таким образом, экземпляр VC, где свойство метки не равно нулю, должно быть начато с помощью «Nib one». label2 is no, потому что NSTextField, на который вы думаете, это выход, не находится в «Nib one». IBoutlets указывают на объекты вида, когда загружается Nib, и нет ничего в загружаемом Nib для метки2, на которую нужно указывать.

У вас должна быть розетка для метки2 в экземпляре VC, которая загружает «Nib three». Обычно это будет другой класс, чем VC, который загружает «Nib one», хотя я не знаю, что у вас не может быть двух перьев с классом владельца одного и того же файла с выводами, которые равны нулю, в зависимости от того, какой nib каждый экземпляр этого VC класс нагрузки.

+0

То, что я создаю, по сути, является мастером настройки .. так как каждый просмотр проходит, я набираю все больше и больше данных от пользователя и располагаю все это в одном контроллере, чтобы быть аккуратным и облегчить для меня. (и я не знаю, как правильно общаться между представлениями ...). Итак, если я правильно понимаю, что я пытаюсь сделать, это невозможно/правильно? Я не могу загружать IBOutlet из наконечника и присоединяться к Outlet в другом классе? – brdu

+1

Если у вас есть выход в VC, к которому вы хотите получить доступ из другого VC, вы можете сделать это с помощью keyPath довольно тривиально. Примечательно, что ваши фрагменты кода представляют собой несколько архаичный синтаксис Objective-C. Если у вас есть экземпляр oneViewController, и у него есть свойство threeViewcontroller, которое вы указываете на экземпляр владельца файла nib три после его загрузки, вы можете просто добраться до трех выходов с одного из ключей с ключом 'self.threeViewController.label2', который будет '[[self threeViewController] label2]' в более раннем синтаксисе. Новый синтаксис точки делает ключевой путь более понятным. – stevesliva

+0

ОК. Понял. Я работаю сейчас, держа ссылку на VC после ее загрузки и используя [[_myVC myLabel] setStringvalue @ "Blah"]; Мне сейчас интересно, когда вы использовали слово архаичный синтаксис. Вы имели в виду, что этот метод (который я не использую) является архаичным? Каков наилучший способ обработки коллекции данных во множестве контроллеров просмотра, т.е.этап 1 (имя/адрес), этап 2 (электронная почта, цвет глаз), этап 3 и т. д., а затем на последнем этапе все это сохранилось. Или я должен упорствовать на каждом шаге, как iPhone? Благодаря! – brdu

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