2

我正在尝试使用 XIB 文件创建 TableViewCell,但在执行时出现此错误:

2013-01-10 17:54:50.297 MainApp [6778:b603] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle(已加载)”,名称为“DropDownCell”
*
第一次抛出调用堆栈:

这就是我想要做的。
我有一个项目,第一个菜单。在这个项目/工作区中,我有我的第一个菜单的类。在这个项目中,我有另一个工作区,其中包含我的第二个菜单的类。我的意思是,这个工作区是为我的第一个菜单中选择的选项的 SubViewController 和类。在这个工作区中,我正在尝试使用来自苹果的演示创建一个 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

4 回答 4

1

@ user1600801,可能有以下原因之一:-

1)在该自定义单元格的文件检查器中禁用/取消选中“使用自动布局”。

2)您的目标没有为该自定义单元设置。

要设置它,请选择您的自定义单元格 .Xib 文件,

选择 "文件检查器",

在“目标会员”下检查您的项目名称是否被选中?如果没有,则检查/启用它。

3) 检查您的自定义单元类名称和单元标识符。

于 2014-02-08T14:40:08.133 回答
0

尝试删除 nib 文件的引用并清理项目。然后将 nib 文件添加回项目并构建。这解决了我的项目中发生的相同异常。

于 2014-02-12T00:02:27.210 回答
0

您是否为该笔尖启用了自动布局,并且正在编译

于 2013-01-11T01:01:06.197 回答
0

问题是您甚至没有加载捆绑包。看到这个问题:

NSInternalInconsistencyException',原因:'无法在包中加载 NIB:'NSBundle

似乎您可以通过从项目中删除文件并再次放在那里来解决它。

于 2013-01-11T01:19:36.343 回答