Класс не соответствует кодированию ключевых значений [дубликат]
этот вопрос уже есть ответ здесь:
- Что это значит? "'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 ответов:
есть несколько вариантов, чтобы решить эту проблему-я позволю вам решить, что является наиболее подходящим.
причина его сбоя заключается в том, что владелец передается как ноль. Вы привязываете выход 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 + щелчок мыши) на каждом пользовательском интерфейсе элемент, чтобы увидеть его ассоциации.
- в своем разделе выходов ссылки, вы будете обнаружить местонахождение ошибочная ассоциация.
- удалите эту ассоциацию
- очистить решение и построить папка
- Сброс Симулятор
- построить и запустить проект.
убедитесь, что выберите ячейку, чтобы поместить пользовательский класс, а не владельца файла, чтобы добавить пользовательский класс на правой стороне сверху и если вы это сделали, перед внесением каких-либо изменений удалите выходное соединение, а затем удалите пользовательский класс из владельца файла и добавьте класс В представление ячейки
может быть, это помогает: Данные Инспектора когда вы выбрали владельца файла - 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
проверьте настройки кода ячейки и раскадровки, существуют ли они все, возможно, вы изменили их имена.