2012-03-10 3 views
0

У меня возникла проблема с методом addObject объекта NSMutableArrayObject. Вот код, я использую прямо сейчас:Невозможно добавить в NSMutableArray метод addObject

- (void)addBirdSightingWithName:(NSString *)name location:(NSString *)location { 
    BirdSighting *bird; 
    NSDate *today = [NSDate date]; 
    bird = [[BirdSighting alloc] initWithName:name location:location date:today]; 
    [self.masterBirdSightingList addObject:bird]; 
    NSLog(@"Elements: %d", [self.masterBirdSightingList count]); 
} 

При выполнении этого кода, печатает NSLog вызова значения 0 на консоль. Я не знаю, что может быть причиной этого.

EDIT:

Я смотрел глубже в код, и я обнаружил, что проблема заключается в том, что мой BirdSightingDataController никогда не инициализируется. Теперь мой вопрос: где я могу разместить init для моего BirdSightingDataController? В viewDidLoad?

Спасибо всем за помощь.

+0

Вы, кажется, не создаете 'UITableViewCell' в любом месте, просто dequeuing existent (если есть). Откуда вы знаете, что его не вызывают? Поместите' NSLog' что-то в первая строка функции и результаты публикации. – Alexander

+0

Является ли это ошибкой cpoy & paste или вы опустили ':' после 'cellForRowAtIndexPath'? Поскольку двоеточие является частью имени метода, это имеет значение. – DarkDust

+0

Посмотрите на редактирование. Моя ошибка, кажется, в модели. Спасибо за все ваши комментарии –

ответ

1

ли вам alloc ели память masterBirdSightingList?

self.masterBirdSightingList = [[NSMutableArray alloc] init]; 
+0

Да, я распределил NSMutableArray –

+0

и вы полностью уверены, что вызов распределения фактически сделан, и что он сделан до того, как вы добавите первый элемент? И, вы @synthesized функции get/set? или может на данный момент не работать, чтобы написать или получить значение из переменной в пользовательском методе get/set? Попробуйте поместить NSLog() при распределении masterBirdSightingList. Все указывает на то, что он не выделяется в тот момент, когда вы вызываете [count]. –

+0

Вы правы. Инициализация класса BirdSightingDataController никогда не вызывается. Любая идея, где я могу это сделать? Я предположил, что контроллер автоматически вызывается, когда метод был синтезирован. –

0

Почти в каждом случае, когда cellForRowAtIndexPath: не вызывается, потому что numberOfRowsInSection: возвращает 0.

Место журнал там и убедитесь, что вы вернетесь более одного пункта, и вы должны быть в состоянии видеть ваши клетки. Если вам нужна дополнительная помощь, пожалуйста, разместить код в ваш:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
+0

Фактически строка, возвращающая нуль, ссылается на NSMutableArray. Не имеет никакого отношения к UITableView. @afruizc, помните, что каждое сообщение, отправленное в нуль (в данном случае self.masterBirdSightingList = nil), вернет нуль. –

+0

Вопрос открытия изменился, поэтому теперь мой ответ не будет соответствовать заданному вопросу. : o –

0

Проверьте свой аксессуар. Вы уверены, что вернули правильный объект? Убедитесь, что имя свойства соответствует переменной экземпляра или вы указали ее правильно (например: @synthesize masterBirdSightingList = _masterBirdSightingList;. Если свойство accessor не соответствует iVar, оно вернет нуль. Конечно, если вы вручную используете аксесс проверить код. Если это не так, вы можете попробовать вручную его реализацию, чтобы убедиться.

чтобы выполнить быструю проверку, удалите self.masterBirdSightingList и заменить его masterBirdSightingList (при условии, что это имя Ивара) для доступа iVar напрямую и посмотреть, что происходит.

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