web-dev-qa-db-ja.com

クラスはキー値コーディングに準拠していません

私はこのエラーの意味を知っていますが、私は本当にそれと格闘しています、そして私は誰かの助けが必要です:

2010-09-21 15:03:11.562 Stocks[5605:207] *** Terminating app due to uncaught 
exception 'NSUnknownKeyException', reason: '[<NSObject 0x499fb20> 
setValue:forUndefinedKey:]: this class is not key value coding-compliant 
for the key actionText.'

ここに私のコードがあります:

AlertCell.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>


@interface AlertCell : UITableViewCell {
    IBOutlet UILabel *actionText;
}

@property (retain, nonatomic) UILabel *actionText;

@end

そして

AlertCell.m

@implementation AlertCell
@synthesize actionText;

- (void)dealloc {
    [actionText release];
    [super dealloc];
}

@end

問題はそこで発生します。

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    AlertCell *cell = 
      (AlertCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AlertCell" 
                                                         owner:nil 
                                                       options:nil];
        for (id oneObject in nib) {
            if ([oneObject isKindOfClass:[UITableViewCell class]]) {
                cell = (AlertCell *)oneObject;
                break;
            }
        }
    }    


    cell.actionText.text = [arrayAlert objectAtIndex:indexPath.row];
    return cell;
}

この行で:

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AlertCell" 
                                             owner:nil 
                                           options:nil];

尋ねられたように、TableViewCOntrollerのヘッダーは次のとおりです。

#import <UIKit/UIKit.h>


@interface AlertesViewController : UITableViewController {
    NSMutableArray *arrayAlert;
}

そして、あなたは私のXIBファイルを(XMLとして)見ることができます: http://Pastebin.com/FDVzLYZ

@終わり

誰も私を助けることができますか?どうもありがとう !

67
Rob

これを解決するためのオプションがいくつかあります-どれが最も適切かを判断させてください。

失敗する理由は、所有者がnilとして渡されているためです。 actionTextアウトレットをIBのファイルの所有者にバインドしていますが、nibをロードするとき、所有者はnilです。背後でnilオーナーを使用してロードする場合、NSObjectが使用されているため、キー/値エラーが発生していると思います。

ペン先がどのように構成されているかわからなかったため、所有者としてセルを渡すという以前のアドバイスも失敗します。セルはまだ作成していないのでnilです(そしてデキューはnilを返しているので、所有者がまだ基本的にnilを渡しているのでcellを渡します)。

2つのオプション:

  • -cellForRowAtIndexPath:(NSIndexPath *)indexPath実装で新しいセルをインスタンス化し、その新しいセルを所有者として渡します(ただし、これは最適なソリューションではないと思います)
  • または、これがより良いソリューションであることをお勧めします、nibファイルのactionTextのバインディングをファイルの所有者ではなくアラートセルに変更します(ファイルの所有者とアラートセルがあります-UILabelをファイルの所有者ではなく、警告セルです。これは現在行われていることです)-これがあなたの望んでいることだと思います。それを念頭に置いて、ファイルの所有者は再びNSObjectになることができます。

-------ファイルの所有者クラスもこのエラーの一般的な原因であるため、以下に元の回答を保持-------

InterfaceBuilderでAlertCellを「インスタンス化」し、actiontextに何かをバインドしているが、クラスがAlertCellに設定されておらず、NSObjectのままであることを示唆しています。

Interface Builderでそのオブジェクトのツールパレットの識別タブにあるクラステキストボックスを見てください。クラスはAlertCellである必要がありますが、NSObjectに設定されていると思います。

余談ですが、このアドバイスを無視しても構いませんが、純粋にObjective Cの期待/慣習の観点から、私はあなたにそうすることをお勧めします。

  • クラスの後にファイル名を付けます(大文字の場合、ファイル名の最初の文字)。
  • クラス名のプレフィックス。 2つの大文字、通常はイニシャル(たとえば、DWAlertCellと名付けます)。
84
dannywartnaby

あなたはおそらく http://www.e-string.com/content/custom-uitableviewcells-interface-builder または http:/ /www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/

あなたの問題(これはあなたがつまずいた場所であると99%確信しています、私はちょうど同じ間違いを犯しました)は、セルビルダーからリンクする必要があるときに、ファイルの所有者からIBOutletsをリンクしたインターフェイスビルダーです。これがエラーが発生する理由です。

102
theprof

私は同じ問題を抱えていて、どのファイルにも前述の変数/要素が見つかりませんでした。次の手順に従いました。

環境:Xcode 6

  • Xibファイルに移動し、各UI要素を右クリック(Ctrl +マウスクリック)して、その関連付けを確認します。
  • 参照するアウトレットセクションで、誤った関連付けを見つけることができます。
  • その関連付けを削除する
  • ソリューションとビルドフォルダーをクリーンアップする
  • シミュレーターのリセット
  • プロジェクトを再構築して実行します。
7
Muhammad Umar

uIControlの確認OutLetプロパティ名の参照 nib/StoryBoardファイルから

5
Baljeet Singh

セルを選択して、ファイルの所有者ではなくカスタムクラスを配置し、右側上部にカスタムクラスを追加します。変更する前に、アウトレット接続を削除してから、ファイルの所有者からカスタムクラスを削除し、セルビューにクラスを追加します

4
user2063513

Indentity Inspector ファイルの所有者を選択した場合-UITableViewCell、Objects内のセルを選択した場合カスタムセルnane

3

これで2時間後、私は忘れていたことに気付きました

@synthesize tableView = _tableView;

それが役に立てば幸い。

マリオ

2
Mário Carvalho
#import <UIKit/UIKit.h>

@interface ReceptionDetailCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *productName;

@property (weak, nonatomic) IBOutlet UILabel *billType;

@property (weak, nonatomic) IBOutlet UILabel *bookTime;

@property (weak, nonatomic) IBOutlet UILabel *doctorName;

@property (weak, nonatomic) IBOutlet UILabel *downBillManName;




@end

Cellコードとストーリーボードの設定を調べてください。それらがすべて存在するかどうかにかかわらず、名前を変更した可能性があります。

0
Gank