2010-01-28 34 views
16

在我的应用程序中,我使用自定义的NIB来加载我的UITableViewCells。 NIB的文件所有者被设置为这个类是我的View Controller。然后我把UITableViewCell链接到我放在头文件中的IBOutlet。这是所有工作的罚款,直到所有的突然它停止工作,并得到这个错误:奇怪的UITableViewCell加载异常

uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (UITableViewCellContentView)' 

我已经追查这个例外[一个NSBundle loadNibNamed:业主:选项:]

static NSString *CellIdentifier = @"SubjectCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
[[NSBundle mainBundle] loadNibNamed:@"SubjectCell" owner:self options:NULL]; 
cell = customSubjectCell; 

我已经在两个设备和模拟器上尝试了这一点,但都得到相同的错误。我今天下载了新的SDK,我认为这可能是由此造成的。


请注意:

这个问题已经过时,下面的修复是一个临时的解决办法。苹果已经修复了它的SDK,所以如果你有最新版本的SDK,这个不会适用于你。

回答

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

它只是工作!非常感谢。 – Jirapong 2010-01-28 15:29:34

+0

非常感谢!它开始让我疯狂! (虽然.h文件末尾没有“@end”) – nmondollot 2010-01-29 11:10:43

+0

非常感谢!这工作!但为什么它打破现有的项目? – Mugunth 2010-01-30 11:38:56

7

呃哦。我遇到了同样的问题...还使用了今天的新SDK(2010年1月28日)。无法确定代码之前是否正常工作,因为我刚刚在更新到新SDK后添加了代码。

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

更新:我只是将模拟器切换到SDK 3.2(从3.12开始),而whattaya知道它现在正在工作(在iPhone和iPad模拟器中)。但是,使用SDK 3.12进行编译时不起作用。

我的猜测是IB是否将3.2版本的XIB保存为新格式?任何人都知道如何强制它保存旧的(3.12)格式?这绝对是一个错误,因为它破坏了以前的工作代码。在开发论坛

1

我有同样的事情。从3.1.2安装3.2测试版并出现此错误。

最后这个修正了它:重建对模拟器3.1,我在模拟器中得到了一个工作版本。之后,针对Simulator 3.1.2工作进行构建。