У меня здесь странная вещь. У меня есть 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 перепутались ...
Что такое tableViewData? Это массив, который вы создали? Если да, то как и где это создает? – sosborn
Можете ли вы показать объявление свойства, код инициализации и код очистки в таблицеViewData? – bryanmac
Что такое 'tableViewData'? Предоставьте код в 'viewDidLoad'. Благодарю. –