Исключительное исключение загрузки UITableViewCell
В моем приложении я использую пользовательский NIB для загрузки UITableViewCells. Владелец файла NIB установлен таким образом, чтобы класс был моим контроллером просмотра. Затем я свяжу UITableViewCell с IBOutlet, который я ввел в файл заголовка. Все работало нормально, пока все это не прекратило работать и получило эту ошибку:
uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (UITableViewCellContentView)'
Я выделил это исключение для [NSBundle loadNibNamed: owner: options:]
static NSString *CellIdentifier = @"SubjectCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"SubjectCell" owner:self options:NULL];
cell = customSubjectCell;
Я пробовал это на двух устройствах и симуляторе, но все они получают ту же ошибку. Сегодня я загрузил новый SDK, и я думаю, что это могло вызвать это.
ОБРАТИТЕ ВНИМАНИЕ:
Этот вопрос устарел, и исправление ниже было временным исправлением. Apple установила свой SDK, поэтому, если у вас установлена самая новая версия SDK, это не относится к вам.
Ответы
Ответ 1
Найдено решение в форумах разработчиков
Создайте этот файл:
UITableViewCellContentView.h
#import <UIKit/UIKit.h>
@interface UITableViewCellContentView : UIView {
}
@end
UITableViewCellContentView.m
#include "UITableViewCellContentView.h"
@implementation UITableViewCellContentView
+ (id)alloc {
return [UIView alloc];
}
+ (id)allocWithZone:(NSZone *)zone {
return [UIView allocWithZone:zone];
}
@end
Ответ 2
О, о. У меня такая же проблема... Также, используя сегодня новый SDK (01/28/2010). Не могу точно сказать, работал ли код раньше, потому что я просто добавил его ПОСЛЕ обновления к новому SDK.
Кто-нибудь еще видит эту проблему сейчас? Любые решения?
Обновление: я просто переключил симулятор на SDK 3.2 (с 3.12), и whattaya знаю... он работает сейчас (в iPhone и iPad-симуляторе). Однако при компиляции с использованием SDK 3.12 он не работает.
Я предполагаю, что IB сохраняет XIB в новом формате для 3.2, возможно? Кто-нибудь знает, как заставить его сохранить в старом (3.12) формате? Это определенно похоже на ошибку, поскольку она нарушает предыдущий рабочий код.
Ответ 3
У меня было то же самое. Установил 3.2 beta из 3.1.2 и имел эту ошибку.
В конце это зафиксировало это: перестройте против Simulator 3.1, и я получил рабочую сборку в симуляторе. После этого строит против работы Simulator 3.1.2.