Класс не соответствует кодированию ключевых значений [дубликат]


этот вопрос уже есть ответ здесь:

  • Что это значит? "'NSUnknownKeyException', причина: ... этот класс не является значением ключа кодирования-совместимый для ключа х" 65 ответы

Я знаю смысл этой ошибки, но я действительно борюсь с ней, и мне нужна чья-то помощь :

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.м

@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/FDVzLYZu

@end

может кто-нибудь помочь мне ? Большое спасибо !

8 67

8 ответов:

есть несколько вариантов, чтобы решить эту проблему-я позволю вам решить, что является наиболее подходящим.

причина его сбоя заключается в том, что владелец передается как ноль. Вы привязываете выход actionText к владельцу файла в IB, но затем при загрузке пера владелец равен нулю. Я бы предположил, что при загрузке с владельцем nil за кулисами используется NSObject, поэтому вы получаете ошибку ключа/значения.

мой предыдущий совет передать ячейку как владелец также потерпел бы неудачу, поскольку я не знал, как строится перо; ячейка равна нулю, поскольку вы еще не создали ее (и dequeue передает nil назад, поэтому даже передайте ячейку, поскольку владелец все еще по существу передает nil).

два варианта:

  • создайте экземпляр новой ячейки в вашей реализации-cellForRowAtIndexPath:(NSIndexPath *)indexPath и передайте эту новую ячейку в качестве владельца (но я бы предположил, что это не лучшее решение для вас)
  • или, и я бы предложил это лучшее решение, измените привязку actionText в вашем файле nib к ячейке предупреждения, а не к владельцу файла (у вас есть владелец файла и ячейка предупреждения - привязать UILabel к выходу actionText ячейки предупреждения, а не к владельцу файла, что и делается в настоящее время) - я подозреваю, что это то, что вы хотите. Имея это в виду владелец файла может снова стать NSObject.

------- оригинальный ответ, сохраненный ниже, поскольку класс владельца файла также является общей причиной за эту ошибку - - - - - - -

Это предполагает, что вы "создали экземпляр" AlertCell в InterfaceBuilder, и вы привязываете что-то к actiontext, но класс не установлен в AlertCell, это все еще NSObject?

взгляните на текстовое поле class на вкладке identify инструментальной палитры для этого объекта в Interface Builder. Класс должен быть AlertCell, но я бы предположил, что он все еще установлен на NSObject.

как в сторону, и не стесняйтесь игнорировать этот совет, но есть несколько дополнительных вещей, которые я бы посоветовал вам сделать, чисто из объективные ожидания C / конвенции точки зрения:

  • имя файлов после вашего класса (верхний регистр первый символ имени файла).
  • префикс имена классов; два прописных символа, как правило, ваши инициалы (я бы назвал его DWAlertCell, например).

вероятно, вы основали свой код на веб-учебнике, таком какhttp://www.e-string.com/content/custom-uitableviewcells-interface-builder или http://www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/

ваша проблема (и я на 99% уверен, что именно здесь вы споткнулись, я просто сделал ту же ошибку) заключается в том, что в interface builder вы связали свои IBOutlets с владельцем файла, когда вы должны связать их с видом ячейки. Вот почему вы получаете ошибки.

У меня была та же проблема, и я не мог найти указанную переменную/элемент в любом файле. Я сделал следующие шаги.

Окружающая Среда: Xcode 6

  • перейдите к файлу Xib и щелкните правой кнопкой мыши (Ctrl + щелчок мыши) на каждом пользовательском интерфейсе элемент, чтобы увидеть его ассоциации.
  • в своем разделе выходов ссылки, вы будете обнаружить местонахождение ошибочная ассоциация.
  • удалите эту ассоциацию
  • очистить решение и построить папка
  • Сброс Симулятор
  • построить и запустить проект.

проверка элементов графического интерфейса Ссылка На Имя Свойства Розетки из файла nib / StoryBoard

убедитесь, что выберите ячейку, чтобы поместить пользовательский класс, а не владельца файла, чтобы добавить пользовательский класс на правой стороне сверху и если вы это сделали, перед внесением каких-либо изменений удалите выходное соединение, а затем удалите пользовательский класс из владельца файла и добавьте класс В представление ячейки

может быть, это помогает: Данные Инспектора когда вы выбрали владельца файла - UITableViewCell, когда вы выбрали ячейку внутри объектов ваша пользовательская ячейка nane

после 2 часов на этом, я понял, что забыл

@synthesize tableView = _tableView;

надеюсь, что это помогает.

Марио

#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

проверьте настройки кода ячейки и раскадровки, существуют ли они все, возможно, вы изменили их имена.