在我的应用程序中,我使用自定义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,则不适用于您.
在dev论坛中找到解决方案
创建此文件:
UITableViewCellContentView.h
#import@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
哦,哦.我遇到了同样的问题......还使用了今天的新SDK(01/28/2010).无法确定代码是否正常工作,因为我刚刚更新到新SDK后添加了它.
现在还有其他人看到这个问题吗?有解决方案吗
更新:我刚刚将模拟器切换到SDK 3.2(从3.12开始),而且知道它现在正在工作(在iPhone和iPad模拟器中).但是,在使用SDK 3.12进行编译时,它不起作用.
我的猜测是IB正在以3.2的新格式保存XIB吗?有谁知道如何强制它以旧(3.12)格式保存?这肯定感觉像一个错误,因为它打破了以前工作的代码.