У меня здесь странная вещь. У меня есть UITableViewController со всеми необходимыми методами из протоколов и данными, которые я буду использовать в нем. Тогда у меня есть этот код (упрощенно)
- (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:
Это то, что я получаю из po tableViewData в tableView: cellForRowAtIndexPath:
<__NSArrayM 0xfdcfe30>(
{
email = "test@test.com";
firstName = test;
fullName = "test account";
id = 1;
lastName = account;
phone = "1 (231) 23";
},
{
email = "gmail@email.com";
firstName = nolast;
fullName = nolast;
id = 3;
lastName = "";
phone = "";
},
{
email = "asdkjf@sdfklja.com";
firstName = "";
fullName = nofirst;
id = 4;
lastName = nofirst;
phone = "";
},
{
email = "test@adsfk.com";
firstName = "";
fullName = "aaa.test@adsfk.com";
id = 5;
lastName = "";
phone = "";
}
)
EDIT:
Я добавил метод:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
и я получаю такое же поведение с фиктивными данными. Кажется, что-то не так с самим UITableViewController или мой xcode испорчен ...