Подтвердить что ты не робот

Пользовательский UITableViewCell дает мне: этот класс не является ключевым значением, совместимым с кодировкой

Прежде всего, это обсуждение не решило мою проблему.

Пользовательский подкласс UITableViewCell: этот класс не соответствует требованиям, совместимым с ключевыми значениями

Настройка:

У меня есть массив объектов Person в MainViewController. Хотите показать объекты в UITableView в AllContactsViewController.

Проблема:

Все работает так, как ожидалось, когда используется UITableViewCell по умолчанию. Когда я использую свой пользовательский TableCell, я получаю ошибку, указывающую на что этот класс не соответствует требованиям к кодированию ключа.

Эта ошибка возникает сразу после подключения ЛЮБОГО из моих трех outlets в IB к моему классу TableCell.

Примечание:

TableCell имеет три свойства: a name и email label + 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;
}

UPDATE:

Возможно, скриншот поможет от IB.

enter image description here

Добавлен полный файл 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
4b9b3361

Ответ 1

Если вы подключаете выходы от владельца файла, вы должны сделать другое:

1 - Определите класс UITableViewCell для вашего класса TableCell:

enter image description here

2 - Подключите выходы не от владельца файла, а из TableCell в списке объектов:

Connect the outlets

Ответ 2

Если вы используете Xcode 6 GM, есть ошибка в IB, которая может привести к этой ошибке. Я не думаю, что у OP была эта проблема, потому что она была более очевидной (вы можете увидеть "undefined класс MyXXXCell" в журнале), но потому, что вы попадаете на этот вопрос из Google, как я, просто попробуйте ввести имя класса в IB и нажмите Enter еще раз, и как только он действительно будет сохранен в файле раскадровки /xml, все будет хорошо.

Ответ 3

У меня была такая же проблема, и любые комментарии здесь или в других дискуссиях помогли мне... в конце я просто сделал чистую причину, я был уверен, что я все делаю правильно и да... магически сработает!

Ответ 4

Это случилось со мной сразу после Git слияния и разрешения нескольких конфликтов. Это привнесло мой проект XCode.

Я пробовал все над StackOverflow. Сначала я думал, что мой пользовательский класс .m файла не был добавлен в список классов источников компиляции. Но это один случай, однако даже после его добавления он дал мне такую ​​же проблему.

Как я решил:

  • Я сохранил резервную копию моего .xib файла и его поддерживающих пользовательских классов .m и .h.
  • Затем очистите проект и попробуйте запустить приложение через XCode (что может не сработать)
  • Затем снова добавьте файлы в проект XCode, и он будет работать.

Ура!