2015-03-24 3 views
0

У меня есть класс:
.hObjective-C: Передача объекта инициализатор

@interface NoticesDataSource : NSObject <UITableViewDataSource> 

@property (nonatomic,strong) NSMutableArray *items; 

@end 

.m

@implementation NoticesDataSource 
... 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [[self items] count]; 
    // return [_items count]; 
} 

- (instancetype)initWithItems:(NSMutableArray *)items { 
    self = [super init]; 

    [self setItems:items]; 
    // _items = items; 

    return self; 
} 

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

    [self setItems:[self prepareItems]]; 
    // _items = [self prepareItems]; 

    return self; 
} 

- (NSMutableArray *)prepareItems { 
    NSMutableArray *items = [[NSMutableArray alloc] init]; 

    ... 
    [items addObject:item]; 
    ... 
    [items addObject:item]; 

    return items; 
} 

... 
@end 

Проблема, когда встречается, метод tableView:numberOfRowsInSection: называется. В этот момент items есть nil.
Что я делаю неправильно?

Я уже прочитал http://qualitycoding.org/objective-c-init/, https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html и некоторые ответы stackoverflow, но я просто не могу понять, что является корнем моей проблемы.

Спасибо.

+0

Вы уверены, что ваш инициализатор называется? (Установите контрольную точку для проверки.) – Drux

+0

И «элементы» определены как «сильные». –

+0

Да, я уверен. Я вызываю 'init' явно и устанавливаю точку останова. Это называется. – seelts

ответ

0

Просто нашел проблему:

Я создания экземпляра моего интерфейса в качестве локальной переменной в другом методе.

- (void)viewDidLoad { 
    ... 

    NoticesDataSource *noticesDataSource = [[NoticesDataSource alloc] init]; 
    self.noticesTableView.dataSource = noticesDataSource; 
} 

Он был автореализован в конце этого метода.

Получил это свойство экземпляра. Сейчас все в порядке.

Извините, что беспокоиться.

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