Проблема в добавлении динамической ячейки в табличном представлении? - PullRequest
1 голос
/ 10 февраля 2012

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

 - (void) allServersFound 
{
    // called from delegate when bonjourservices has listings of machines:
    NSArray *newPosts = [[NSArray alloc]initWithObjects:@"A", nil]; // NSArray of machine names;

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil];

int i = 0;
for (NSArray *count in newPosts)
{
    [tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
}

[[self tblHome] beginUpdates];
[[self tblHome] insertRowsAtIndexPaths:tempArray withRowAnimation:UITableViewRowAnimationNone];
[[self tblHome] endUpdates];

[tempArray release];
}

Но это дает мне следующее исключение во время выполнения: * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSIndexPath _fastCStringContents:]: нераспознанный селектор отправлен на экземпляр 0x4e0e130

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Как уже отмечалось, ваш tempArray содержит смесь объектов NSString и NSIndexPath.Это наиболее очевидная вещь, к которой вам нужно обратиться, прежде чем делать что-либо еще.Для этого вы можете использовать метод класса [NSMutableArray array] (он автоматически освобожден, поэтому вам нужно удалить вызов [tempArray release] в конце вашего метода).

Менее очевидным является то, что модель вашего UITableView должна быть обновлена ​​перед вызовом insertRowsAtIndexPaths, в противном случае вы получите другое исключение в гораздо менее очевидном месте.

1 голос
/ 10 февраля 2012

Сначала вы инициализируете ваш tempArray такими строками:

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil];

Затем вы добавляете indexPaths следующим образом:

[tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];

, чтобы передать массивметод insertRowsAtIndexPaths содержит как строки, так и объекты indexPaths.Я думаю, что это является причиной исключения.

0 голосов
/ 10 февраля 2012

Ваш tmparray содержит NSString значения, а также IndexPath s, попробуйте сначала удалить NSString s. Попробуйте заменить строку

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil];

с линией

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...