loadNibNamed - 无法在bundle中加载NIB:NSBundle

时间:2013-01-11 00:54:03

标签: objective-c drop-down-menu uitableview xcode4.3

我正在尝试使用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,而且我没有使用故事板。

4 个答案:

答案 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文件添加回项目并构建。 这解决了我项目中发生的同样异常。