我正在尝试使用XIB文件创建TableViewCell,但是我在执行时遇到了这个错误:
2013-01-10 17:54:50.297 MainApp [6778:b603] *由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle(loaded)'名称'DropDownCell'' * 首先调用堆栈:
这就是我要做的事
我有一个项目,第一个菜单。在这个项目/工作区中,我有第一个菜单的类。在这个项目中,我有另一个工作区,我的第二个菜单的类。我的意思是,这个工作区用于SubViewController和我在第一个菜单中选择的选项的类。在这个工作区中,我正在尝试使用apple的演示创建一个DropDownMenu,但是我的应用程序崩溃了。该演示使用XIB文件在表中创建单元格
这是DropDownCell类:
的 DropDownCell.h
#import <UIKit/UIKit.h>
@interface DropDownCell : UITableViewCell{
IBOutlet UILabel *textLabel;
IBOutlet UIImageView *arrow_up;
IBOutlet UIImageView *arrow_down;
BOOL isOpen;
}
-(void)setOpen;
-(void)setClosed;
@property (nonatomic)BOOL isOpen;
@property (nonatomic,retain) IBOutlet UILabel *textLabel;
@property (nonatomic,retain) IBOutlet UIImageView *arrow_up;
@property (nonatomic,retain) IBOutlet UIImageView *arrow_down;
@end
DropDownCell.m #import“DropDownCell.h”
@implementation DropDownCell
@synthesize textLabel, arrow_up, arrow_down, isOpen;
-(void)setOpen{
[arrow_down setHidden:YES];
[arrow_up setHidden:NO];
[self setIsOpen:YES];
}
-(void)setClosed{
[arrow_down setHidden:NO];
[arrow_up setHidden:YES];
[self setIsOpen:NO];
}
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if(self){
}
return self;
}
-(void)setSelected:(BOOL)selected animated:(BOOL)animated{
[super setSelected:selected animated:animated];
}
-(void)dealloc{
[super dealloc];
}
@end
DropDownCell.xib 有一个带UILabel的UITableViewCell。
我有另一个UITableViewController,它使用DropDownCell XIB。这是方法:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"MenuCell";
static NSString *DropDownCellIdentifier = @"DropDownCell";
if([indexPath row] == 0){
DropDownCell *cell = (DropDownCell*)[tableView dequeueReusableCellWithIdentifier:DropDownCellIdentifier];
if(cell == nil){
NSArray *topLevelObjects = [[NSBundle mainBundle]loadNibNamed:@"DropDownCell" owner:self options:nil];
for(id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[DropDownCell class]]){
cell = (DropDownCell*)currentObject;
break;
}
}
}
[[cell textLabel] setText:@"Option 1"];
return cell;
}
但是我的应用程序在加载NIB文件时崩溃了...原因是什么?我正在使用Xcode 4.3,而且我没有使用故事板。
答案 0 :(得分:1)
@ user1600801,可能有以下原因之一: -
1)在File Inspector中为该Custom单元格禁用/取消选中“Use Autolayout”。
2)没有为该自定义单元格设置目标。
要设置它,请选择自定义单元格.Xib文件,
选择“文件检查器”,
在“目标会员资格”下,检查您的项目名称是否已被选中?如果没有,则检查/启用它。
3)检查您的自定义单元格类名称和单元格标识符。
答案 1 :(得分:0)
您是否为该NIB启用了自动布局,并且正在进行编译
答案 2 :(得分:0)
问题是你甚至没有加载捆绑包。看到这个问题:
NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle
您似乎可以通过从项目中删除文件并再次放置来进行排序。
答案 3 :(得分:0)
尝试删除nib文件的引用并清理项目。 然后将nib文件添加回项目并构建。 这解决了我项目中发生的同样异常。