Класс не соответствует ключевым требованиям.
Я знаю смысл этой ошибки, но я действительно борюсь с ней, и мне нужна помощь:
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.m
@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
Может ли кто-нибудь мне помочь? Большое спасибо!
Ответы
Ответ 1
Есть несколько вариантов решения этой проблемы - я позволю вам решить, какой из них наиболее подходит.
Причина, по которой он терпит неудачу, заключается в том, что владелец передается как ноль. Вы связываете выход actionText с владельцем файла в IB, но затем при загрузке ниба владелец равен нулю. Я предполагаю, что при загрузке владельцем nil за сценой используется NSObject, поэтому вы получаете ошибку ключа/значения.
Мой предыдущий совет, чтобы передать ячейку, поскольку владелец также потерпел неудачу, поскольку я не знал, как построен Ниб; ячейка равна нулю, так как вы еще ее не создали (и dequeue передает нуль назад, поэтому даже передайте ячейку, поскольку владелец по-прежнему по существу пропускает ноль).
Два варианта:
- Создайте новую ячейку в своей реализации -cellForRowAtIndexPath: (NSIndexPath *) indexPath и передайте эту новую ячейку в качестве владельца (но я бы предположил, что это не лучшее решение для вас)
- Или, и я бы предложил, что это лучшее решение, измените привязку actionText в вашем файле nib к ячейке оповещения, а не владельцу файла (у вас есть владелец файла и ячейка предупреждения) привяжите UILabel к actionText выход из Alert Cell, а не владелец файла, что и делается сейчас). Я подозреваю, что это то, что вы хотите. Имея это в виду, владелец файла может снова стать NSObject.
------- Исходный ответ сохраняется ниже, поскольку класс владельца файла также является общей причиной этой ошибки -------
Это предполагает, что вы "создавали экземпляр" AlertCell в InterfaceBuilder, и вы привязываете что-то к файлу actiontext, но класс не настроен на AlertCell, он все еще NSObject?
Взгляните на текстовое поле класса на вкладке идентификации палитры инструментов для этого объекта в Interface Builder. Класс должен быть AlertCell, но я предполагаю, что он все еще установлен в NSObject.
В стороне и не стесняйтесь игнорировать этот совет, но есть несколько дополнительных вещей, которые я бы рекомендовал вам сделать, исключительно с точки зрения ожиданий/соглашений Objective C:
- Назовите свои файлы после вашего класса (верхний регистр - первый символ имени файла).
- Префикс имен вашего класса; два заглавных буквы, обычно ваши инициалы (например, я бы назвал его DWAlertCell).
Ответ 2
вы, вероятно, основывали свой код на веб-учебном пособии, например, на http://www.e-string.com/content/custom-uitableviewcells-interface-builder или http://www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/
Ваша проблема (и я на 99% уверен, что это то, с чем вы споткнулись, я просто сделал ту же ошибку) заключается в том, что в построителе интерфейса вы связали свои IBOutlets с файловым владельцем, когда вы должны связать их с видом ячейки. Вот почему вы получаете ошибки.
Ответ 3
У меня была та же проблема, и я не мог найти упомянутый переменный/элемент в любом файле. Я выполнил следующие шаги.
Окружающая среда: Xcode 6
- Перейдите в Xib файл и щелкните правой кнопкой мыши (Ctrl + Mouse Click) в каждом пользовательском интерфейсе.
чтобы увидеть его ассоциации.
- В разделе справочных точек вы сможете найти
ошибочная ассоциация.
- Удалить эту ассоциацию
- Очистите решение и создайте папку
- Reset Симулятор
- Перестроить и запустить проект.
Ответ 4
проверить UIControl Ссылка на имя свойства OutLet из файла nib/StoryBoard
Ответ 5
Убедитесь, что ячейка select помещает пользовательский класс не Owner Owner для добавления пользовательского класса
с правой стороны сверху
и если вы это сделали, прежде чем делать какие-либо изменения, удалите выходное соединение, а затем удалите пользовательский класс из владельца файла и добавьте представление класса в ячейку
Ответ 6
Может быть, это помогает:
Indentity Inspector , когда вы выбрали владельца файла - UITableViewCell, , когда вы выбрали ячейку внутри объектов. Пользовательский сотовый ящик
Ответ 7
Через 2 часа я понял, что забыл
@synthesize tableView = _tableView;
Надеюсь, что это поможет.
Мариу
Ответ 8
#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
Ознакомьтесь с настройками сотового кода и раскадровки, независимо от того, все ли они существуют, возможно, вы изменили свои имена.