2

XIB ファイルを使用して TableViewCell を作成しようとしていますが、実行時に次のエラーが発生します。

2013-01-10 17:54:50.297 MainApp[6778:b603] *キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。
最初のスローでスタックを呼び出す:

これが私がやろうとしていることです。
最初のメニューを持つプロジェクトがあります。このプロジェクト/ワークスペースには、最初のメニューのクラスがあります。このプロジェクト内には、2 番目のメニュー用のクラスを含む別のワークスペースがあります。つまり、このワークスペースは、最初のメニューで選択したオプションの 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 を持つ 1 つの UITableViewCell があります。
DropDownCell XIB を使用する別の UITableViewController があります。これは方法です:

-(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

問題は、バンドルをロードしていないことです。この質問を参照してください:

NSInternalInconsistencyException'、理由: 'バンドル内の NIB をロードできませんでした:'NSBundle

プロジェクトからファイルを削除して、そこに再度配置するだけで整理できるようです。

于 2013-01-11T01:19:36.343 に答える
0

nib ファイルの参照を削除して、プロジェクトをきれいにしてみてください。次に、nib ファイルをプロジェクトに追加してビルドします。これにより、私のプロジェクトで発生した同じ例外が解決されます。

于 2014-02-12T00:02:27.210 に答える
0

そのNIBに対して自動レイアウトを有効にしていて、コンパイルしていますか

于 2013-01-11T01:01:06.197 に答える