在我的应用中,我使用自定义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,则不会适用于您。
答案 0 :(得分:26)
在开发论坛中找到解决方案
创建此文件:
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
答案 1 :(得分:7)
其他人现在看到这个问题了吗?任何解决方案?
更新:我刚刚将模拟器切换到SDK 3.2(从3.12开始),而且知道它现在正在运行(在iPhone和iPad模拟器中)。但是,在使用SDK 3.12进行编译时,它不起作用。
我的猜测是IB正在以3.2的新格式保存XIB吗?有谁知道如何强制它以旧(3.12)格式保存?这肯定感觉像是一个错误,因为它破坏了之前正在运行的代码。
答案 2 :(得分:1)
我有同样的事情。从3.1.2安装3.2 beta并出现此错误。
最后修复它:重建模拟器3.1,我在模拟器中得到了一个工作版本。在此之后,针对Simulator 3.1.2工作。