2012-02-06 6 views
1

У меня здесь странная вещь. У меня есть UITableViewController со всеми необходимыми методами из протоколов и данными, которые я буду использовать в нем. Тогда у меня есть этот код (упрощенный)Ошибка EXC_BAD_ACCESS при запуске приложения

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

NSDictionary* cellData = [self.tableViewData objectAtIndex:indexPath.row]; 
// the rest of the code 

return cell; 
} 

Этот TableViewController должен быть выполнен после того, как несколько кликов, поэтому он не вызывается или ссылаться в AppDelegate или где-нибудь в ViewController, загружаемой в начале. Но когда я создаю (успешно) и запускаю приложение в симуляторе, он выходит с ошибкой EXC_BAD_ACCESS перед тем, как что-либо будет отображаться. Я выяснил, что, когда я комментирую строку:

NSDictionary* cellData = [self.tableViewData objectAtIndex:indexPath.row]; 

Все работает нормально. Почему у этого есть что-нибудь с этим? Кроме того, tableViewData загружается в viewDidLoad и не выпущен до этой строки, и все остальное в порядке (я даже могу удалить строки ниже этого). Он даже не должен отправлять эту ошибку, но это происходит и при запуске приложения. Что дает?

EDIT: Вот viewDidLoad метод:

- (void)viewDidLoad { 
[super viewDidLoad]; 

self.tableViewData = [self getABContactsWithMail]; //gets filtered contacts from addressbook, works fine 
} 

Вот другие части кода:

- (void)viewDidUnload { 
[super viewDidUnload]; 
self.tableViewData = nil; 
} 

-(void)dealloc{ 
[tableViewData release]; 
[super dealloc]; 
} 

EDIT: Это то, что я получаю от ро tableViewData в Tableview: cellForRowAtIndexPath:

<__NSArrayM 0xfdcfe30>(
{ 
email = "[email protected]"; 
firstName = test; 
fullName = "test account"; 
id = 1; 
lastName = account; 
phone = "1 (231) 23"; 
}, 
{ 
email = "[email protected]"; 
firstName = nolast; 
fullName = nolast; 
id = 3; 
lastName = ""; 
phone = ""; 
}, 
{ 
email = "[email protected]"; 
firstName = ""; 
fullName = nofirst; 
id = 4; 
lastName = nofirst; 
phone = ""; 
}, 
{ 
email = "[email protected]"; 
firstName = ""; 
fullName = "[email protected]"; 
id = 5; 
lastName = ""; 
phone = ""; 
} 
) 

EDIT: я добавил метод:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

и я получаю такое же поведение с фиктивными данными. Кажется, что-то не так с самим или мой Xcode UITableViewController перепутались ...

+0

Что такое tableViewData? Это массив, который вы создали? Если да, то как и где это создает? – sosborn

+0

Можете ли вы показать объявление свойства, код инициализации и код очистки в таблицеViewData? – bryanmac

+0

Что такое 'tableViewData'? Предоставьте код в 'viewDidLoad'. Благодарю. –

ответ

0

Я, наконец, нашел его путем проб и ошибок. По-видимому, мой UITableViewController реализует некоторые из протоколов, которые уже были реализованы в его родительском классе. И в этом была вся проблема ...

Я действительно не знаю, почему вся заявка подавлена ​​в нерелевантном месте с нерелевантной ошибкой. Если это была моя ошибка кодирования, компилятор должен предупредить меня хотя бы.

Кроме того, я помню, что я делал это без проблем на Xcode 3 ...

Я представил это как ошибку в Apple, ...

0

Можете ли вы предоставить нам ваш метод - (NSInteger) Tableview: (UITableView *) Tableview numberOfRowsInSection: раздел (NSInteger)

Должно выглядеть так:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [tableViewData count]; 
} 
+0

Это как вы заявили. Также количество разделов равно 1, как и должно быть – adnanced

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