奇怪的UITableViewCell加载异常

时间:2010-01-28 04:33:24

标签: iphone debugging uitableview

在我的应用中,我使用自定义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,则不会适用于您。

3 个答案:

答案 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(01/28/2010)。无法确定代码之前是否正常工作,因为我刚刚更新到新SDK后添加了它。

其他人现在看到这个问题了吗?任何解决方案?

更新:我刚刚将模拟器切换到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工作。