Проблемы с связыванием класса обработчика NSTableView

У меня странная проблема в моем приложении Cocoa. У меня есть главное окно с NSTableView в нем с классом контроллера (PropValTableHandler). Я установил соединения между моим NSTableView и PropValTableHandler, но когда вызывается метод «numberOfRowsInTableView», похоже, что не используется «PropValTableHandler», инициализированный в «AddDelegate», поскольку поле «propMan» не инициализировано (это похоже на используется обычная инициализация, поэтому это должен быть другой экземпляр этого класса). Я делаю что-то неправильно? У меня есть другой обработчик NSTableView в другом окне, который работает, но у него нет собственного метода инициализации.

Исходные коды:

Делегирование приложения

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize propValTableController = _propValTableController;

-(id) init
{
    self = [super init];

    if (self)
    {
        _propMan = [[OCPropertyManager alloc]initWithPath:"./data/"];
        _propValTableController = [[PropValTableHandler alloc] 
                                   [initWithPropManager:_propMan];
    }

    return self;
}

PropValTableHandler

@interface PropValTableHandler : NSObject <NSTableViewDataSource>

@property IBOutlet NSTableView * constants;
@property OCPropertyManager    * propMan;

-(id) initWithPropManager:(OCPropertyManager*)pm;

-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView;

@end


#import "PropValTableHandler.h"

@implementation PropValTableHandler


-(id) initWithPropManager:(OCPropertyManager*)pm
{
    self = [super self];
    if (self)
    {
        self.propMan = pm;
    }

    return self;
}

/*********** TABLEVIEW DATASOURCE ******************/
-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView
{
    NSInteger count = [_propMan.consts count];
    return count;
}
/**************************************************/

@end

person Istvan    schedule 07.04.2014    source источник
comment
Не могли бы вы опубликовать код, где вы инициализируете _propMan?   -  person Zhans    schedule 07.04.2014
comment
Он инициализируется в методе initWithPropManager PropValTableHandler.   -  person Istvan    schedule 07.04.2014
comment
Теперь, когда я снова смотрю на это, нужен ли мне синтез для поля «_propMan»?   -  person Istvan    schedule 07.04.2014
comment
Я не уверен :). я не могу понять твою проблему   -  person Zhans    schedule 07.04.2014
comment
Я распечатал адрес самого PropValTableHandler в «initWithPropManager»: 0x0000608000430fa0 и в «numberOfRowsInTableView»: 0x000060800022a7c0. Итак, ясно, что это два разных экземпляра, и я не знаю, почему он автоматически инициализирует еще один...   -  person Istvan    schedule 07.04.2014


Ответы (1)


Я решил проблему, добавив

@property IBOutlet AppDelegate *parent;

для класса PropValTableHandler и установления соединений. Таким образом, я могу использовать:

parent.propMan

там, где мне это нужно, не передавая ссылку на него в методе инициализации.

person Istvan    schedule 07.04.2014