Использование одного NIB с несколькими контроллерами представления - PullRequest
1 голос
/ 17 марта 2011

В основном я хочу использовать nib-файл и просматривать контроллер в качестве шаблона для представления, которое планирую создать несколько раз. Этот кончик будет иметь несколько ярлыков и пользовательских видов. Идея состоит в том, что я буду перебирать массив объектов и для каждого я буду создавать экземпляр этого контроллера и присваивать ему свойство объекта из массива.

В настоящее время все работает хорошо, за исключением одного - ярлыки не обновляются, когда я вызываю setStringValue: !!!

Я использую метод в коде контроллера представления, чтобы внести изменения, но он просто не работает, я предполагаю, что IBOutlet неправильно подключен, что странно, потому что подключаются пользовательские представления отлично.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Установите точку останова на awakeFromNib и посмотрите в отладчике, каково значение выхода метки. Все розетки должны быть подключены до вызова awakeFromNib. Если это все еще ноль, у вас есть свой ответ. Вызов setStringValue: при nil точно не делает ничего. В этом случае вы неправильно связали розетку или, возможно, когда-то она была правильно привязана, а затем изменили имя, в этом случае должен быть желтый предупреждающий треугольник в Xcode4 или построителе интерфейса, указывающий, что что-то не так; однако это не помешает вашему приложению создавать или запускать, розетка просто сохранит свое первоначальное значение после создания объекта (ноль).

0 голосов
/ 18 марта 2011

Спасибо за ответы, они были полезны, но не совсем то, что я получал. В конце концов я решил ее, создав пустой NIB и заполнив его просто пользовательским NSView и несколькими другими элементами управления. Я создал подкласс NSView с IBOutlets для этих элементов управления и установил идентичность пользовательского представления для моего подкласса в построителе интерфейса. Хитрость в том, чтобы заставить его работать каждый раз, когда я хотел нарисовать его, заключался в создании метода класса в моем подклассе, который бы загружал перо и возвращал представление, настроенное так, как я хотел.

Код ниже:

+(id)todoViewFromNibWithFrame:(NSRect)frameRect todoList:(TodoList *)aTodoList
{
    NSNib *todoViewNib = [[NSNib alloc] initWithNibNamed:@"TodoView" bundle:nil];
    NSArray *objects = nil;

    id todoView = nil;

    [todoViewNib instantiateNibWithOwner:nil topLevelObjects:&objects];
    for (id object in objects) {
        if ([object isKindOfClass:[self class]]) {
            todoView = object;
            [todoView setTodoList:aTodoList];
            break;
        }
    }

    [todoViewNib release];
    return todoView;
}

Еще раз спасибо за ответы! Стив

0 голосов
/ 17 марта 2011

Когда вы распределяете ваши NSViewControllers, просто инициализируйте с именем NIB:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
...