31

まず第一に、この議論は私の問題を解決しませんでした。

カスタム UITableViewCell サブクラス: このクラスはキー値コーディングに準拠していません

設定:

に Person オブジェクトの配列がありますMainViewController。のオブジェクトを表示しUITableViewたいAllContactsViewController

問題:

デフォルトを使用すると、すべてが期待どおりに機能しますUITableViewCell。カスタムを使用するTableCellと、このクラスがキー値コーディングに準拠していないことを示すエラーが表示されます。

このエラーは、3 つのうちいずれかをクラスoutletsに接続した直後に発生します。IBTableCell

ノート:

TableCellname& emaillabel +の 3 つのプロパティがありますimageView

お役に立てれば幸いです。

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;
}

アップデート:

IB のスクリーンショットが役立つかもしれません。

ここに画像の説明を入力

完全な AllContactsViewController.h を追加しました

#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
4

6 に答える 6

67

ファイルの所有者からアウトレットに接続している場合は、別のことを行う必要があります。

1 - UITableViewCell のクラスを TableCell クラスに定義します。

ここに画像の説明を入力

2 -ファイルの所有者からではなく、オブジェクト リストの TableCell からアウトレットを接続します。

コンセントを接続する

于 2012-08-16T11:04:35.007 に答える
2

Xcode 6 GM を使用している場合、IB にバグがあり、このエラーが発生する可能性があります。OPがこの問題を抱えていたとは思いません。なぜなら、それはより明白だからです(ログに「未定義のクラスMyXXXCell」が表示されます)が、私のようなGoogleからこの質問を受ける原因となるため、IBにクラス名を入力してみてくださいもう一度Enterキーを押して、ストーリーボード/xmlファイルに実際に保存されたら問題ありません。

于 2014-09-30T05:40:31.297 に答える
1

私は同じ問題を抱えていて、ここまたは他の議論のコメントのいずれかが私を助けてくれました.

于 2015-07-07T10:20:44.900 に答える
0

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

私はStackOverflow全体を試しました。最初は、自分のカスタム クラス .m ファイルが Compile Sources クラス リストに追加されていないと思っていました。しかし、それは1つのケースですが、追加した後でも同じ問題が返されました。

私が解決した方法:

  1. .xib ファイルとそのバッキング カスタム クラス .m および .h ファイルのバックアップを保持しました。
  2. 次に、プロジェクトをクリーンアップし、XCode 経由でアプリを実行してみます (うまくいかない可能性があります)。
  3. 次に、ファイルを XCode プロジェクトに再度追加すると、機能します。

乾杯!

于 2016-08-05T08:19:19.643 に答える