2012-08-16 11 views
19

まず、このディスカッションは私の問題を解決しませんでした。カスタムUITableViewCellが私に教えてくれます:このクラスはコードに準拠したキー値ではありません

Custom UITableViewCell subclass: This class is not a key value coding-compliant

セットアップ:

私はMainViewControllerにおけるPersonオブジェクトの配列を持っています。 UITableViewのオブジェクトをAllContactsViewControllerに表示する。

問題:

すべての作品デフォルトUITableViewCellを使用すると、期待どおり。 TableCellのカスタムを使用すると、 というエラーが表示され、このクラスはキー値のコーディングに対応していません。

このエラーは、私のoutletsのいずれかをIBに接続した直後に、TableCellクラスに発生します。

注:name & emailラベル+ imageView

TableCellは、3つのプロパティがあります。

希望すると助かります。

TableCell.h

#import <UIKit/UIKit.h> 

@interface TableCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *nameLabel; 
@property (weak, nonatomic) IBOutlet UILabel *emailLabel; 
@property (weak, nonatomic) IBOutlet UIImageView *imageView; 

@end 

TableCell.m

#import "TableCell.h" 

@implementation TableCell 
@synthesize nameLabel, imageView, emailLabel; 

AllContactsViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdent = @"TableCell"; 

    TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdent]; 

    if (cell == nil) { 

     NSArray *array = [[NSBundle mainBundle]loadNibNamed:@"TableCell" owner:self options:nil]; 
     cell = [array objectAtIndex:0]; 
    } 

    NSString *firstAndLastnameString = 
    [NSString stringWithFormat:@"%@ %@", 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] firstName], 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] lastName]]; 

    cell.nameLabel.text = firstAndLastnameString; 

    cell.emailLabel.text = 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] eMail]; 

    cell.imageView.image = 
    [(NewContact *)[self.allContactsArray objectAtIndex:[indexPath row]] contactPicture]; 

    return cell; 
} 

U PDATE:

多分、IBからのスクリーンショットが役立つでしょう。フルAllContactsViewControllerを追加しました

enter image description here

。時間

#import <UIKit/UIKit.h> 
#import "VCDelegate.h" 
#import "TableCell.h" 

@interface AllContactsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

@property (weak, nonatomic) id <VCDelegate>delegate; 

@property (weak, nonatomic) IBOutlet UITableView *allContactsTableView; 

@property (strong, nonatomic) NSMutableArray *allContactsArray; 

@property (assign) int currentArrayIndexNumber; 

- (IBAction)closeBtnTapped:(id)sender; 

@end 
+1

どのキーに対応していないのですか?正確なエラーメッセージを出してください。 - 'cell = [array objectAtIndex:0]'が実際にあなたの 'TableCell'クラスのインスタンスを返すことを確認しましたか? –

+0

「出口」に依存してIBに接続します。私は 'name'の' label'を接続し、アプリケーションがクラッシュし、アプリがクラッシュする代わりに 'imageView'を接続します。私は 'TableCell'で宣言したすべてのプロパティに問題があるようですが、私は 'TableCell'のインスタンスを取得しているはずです。そうでなければエラーは' TableCell'にあるコンセントにエラーがあるので、エラーメッセージ: '[ setValue:forUndefinedKey:]:このクラスはキーimageViewのキー値コーディングに準拠していません。 ' –

+0

エラーメッセージは' AllContactsViewController'を指しています!チェックするコードに 'NSLog(@" class =%@ "、[cell class]);'を追加してください。 –

答えて

53

あなたはファイルの所有者からコンセントを接続している場合、あなたは異なる実行する必要があります。

1 - あなたのテーブルセルのクラスにUITableViewCellのクラスを定義します。

enter image description here

2 - オブジェクトのリストに含まれていないファイルの所有者から、しかし、テーブルセルからコンセントを接続します

Connect the outlets

+0

IBではIすでに 'class'を' TableCell'に設定しています。私は私がTableCell' –

+0

'で宣言されている' outlets'が編集をチェックし、それはあなたの問題 –

+0

こんにちはナタンを解決する参照ファイルの所有者をクリックし、Ctrlときに、残念ながら、私はIBに行ってきました私のカスタムに 'TableViewCELL'を設定しました'クラス'。CTRLが 'cell'をクリックして' outlet 'を接続しましたが、同じエラーです。オリジナルの投稿を編集し、スクリーンショットを追加しました。多分それは助けます。 –

1

Xcode 6 GMを使用している場合、このエラーが発生する可能性のあるバグがあります。私はOPがこの問題を抱えているとは思っていません。(ログに "未定義のクラスMyXXXCell"が表示されます)しかし、私のようなこの質問にはIBからクラス名を入力しようとしていますもう一度Enterキーを押すと、ストーリーボード/ xmlファイルに実際に保存されていれば正常に動作します。

0

最後に、私はちょうど私が私がすべてを正しく行うと、はい...魔法のように働いていたかなり確信していたクリーンな原因を作った...私を助け、私は同じ問題やコメントの任意のここや他の議論にしていました!

0

これは、Gitはマージし、いくつかの競合を解決した直後に私に起こりました。 私のXCodeプロジェクトを台無しにしました。

私はStackOverflow全体を試しました。最初は私のカスタムクラス.mファイルがコンパイルソースクラスリストに追加されていないと思った。しかしそれは1つのケースですが、追加した後でも同じ問題が戻ってきました。私は解決方法

  1. を私は私の.xibファイルとそのバッキングカスタムクラスの.mと.hファイルのバックアップを保ちました。
  2. 次に、プロジェクトをクリーンアップして、XCode経由でアプリケーションを実行してください(動作しない可能性があります)
  3. ファイルをXCodeプロジェクトに再度追加すると、そのファイルが再び動作します。

乾杯!

関連する問題