Странное исключение загрузки UITableViewCell - PullRequest
16 голосов
/ 28 января 2010

В моем приложении я использую пользовательский NIB для загрузки моих UITableViewCells. Владелец файла NIB установлен так, что класс является моим View Controller. Затем я связываю 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, не распространяется на вас .

Ответы [ 3 ]

26 голосов
/ 28 января 2010

Найдено решение на форумах разработчиков

Создать эти файлы:

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
7 голосов
/ 28 января 2010

Э-э-э У меня та же проблема ... Также использую сегодняшний новый SDK (28.01.2010). Не могу точно сказать, работал ли код раньше, потому что я просто добавил его ПОСЛЕ обновления до нового SDK.

Кто-нибудь еще видел эту проблему сейчас? Любые решения?

Обновление : Я только что переключил симулятор на SDK 3.2 (с 3.12), и что бы знать ... он работает сейчас (в симуляторе iPhone и iPad). Однако он не работает при компиляции с использованием SDK 3.12.

Я предполагаю, что IB сохраняет XIB в новом формате для 3.2, возможно? Кто-нибудь знает, как заставить его сохранить в старом (3.12) формате? Это определенно похоже на ошибку, так как нарушает ранее работающий код.

1 голос
/ 01 февраля 2010

У меня было то же самое.Установил бета-версию 3.2 из 3.1.2 и имел эту ошибку.

В конце концов это исправило: Перестройте против Simulator 3.1, и я получил работающую сборку в симуляторе.После этого сборки против симулятора 3.1.2 работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...