У меня есть UITableView, заполненный ячейками из подкласса UIB под UIBableViewCell. Я получаю каждый так:Использование iOS loadNibName для извлечения подкласса UITableViewCell
+(id) getClassObjectFromNib:(NSString*) nibName subclassOf: (Class) cls owner:(id)own
{
id result = nil;
NSArray* topLevelObjects = [[NSBundle mainBundle]
loadNibNamed:nibName
owner:own
options:nil];
for (id currentObject in topLevelObjects)
{
if ([currentObject isKindOfClass:cls])
{
result = currentObject;
[result retain];
break;
}
}
return result;
}
Мой вызов выглядит следующим образом:
@interface TargetViewController : UITableViewController
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [TargetCell defaultReuseIdentifier];
TargetCell* cell = (TargetCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = (TargetCell*) [UtilityHelper getClassObjectFromNib:CellIdentifier subclassOf:[UITableViewCell class] owner:self];
}
if (nil != cell)
{
// Other initialization code for cell controls
cell.showsReorderControl = 1;
}
return cell;
}
Но «dealloc» никогда не вызывается на клетках, когда их вид разгружает. Если я удаляю «Сохранить» выше, вызывается dealloc, но приложение вылетает, когда ячейка удаляется индивидуально (через swipe) из UITableView (сбой из-за сообщения на удаленный элемент).
За исключением случая единственного удаления, освобождение элементов происходит при выгрузке вида. Ошибка - «[TargetCell _setDeleteAnimationInProgress:]: сообщение отправлено на освобожденный экземпляр».
Пожалуйста, добавьте пример, в котором вы используете этот метод. Также добавьте интерфейс объекта, переданного как 'owner' –
Есть ли причина, по которой вы не используете ARC? Я рекомендую вам использовать его, и тогда это зависит от того, как вы храните его в экземпляре, который вызывает вашу функцию. – oren
Обновлен для добавления примера использования. – dhovel