2012-03-15 1 views
8

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

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<CustomCell 0x6e627d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key title.' 

Я пытаюсь загрузить настраиваемый вид таблицы ячейку с nibname: @ «CustomCell». Его класс присваивается «CustomCell» (такое же имя класса, как имя nib). Владелец файла также установлен в класс, который загружает эти ячейки - «ProductsTableViewControllerWithSearch». Все выходы в бобах связаны с теми, в CustomCell.m

Вот мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellClassName = @"CustomCell"; 
    static NSString *CellIdentifier = @"Custom Items Cell"; 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 

     NSArray *topLevelItems = [[UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]] instantiateWithOwner:self options:nil]; 
     cell = [topLevelItems objectAtIndex:0]; 

    } 
//... more irrelevant code here 
} 

Может кто-нибудь помочь мне, пожалуйста. Я работаю над этим более 4 часов. Большое спасибо!

PS: Я использую ARC, и я для разработки прошивки 5.

Вот мой CustomCell.h.

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell{ 
    UILabel *textLabel; 
    UILabel *detailTextLabel; 
    UIButton *starButton; 
} 

@property (strong, nonatomic) IBOutlet UILabel *textLabel; 
@property (strong, nonatomic) IBOutlet UILabel *detailTextLabel; 
@property (strong, nonatomic) IBOutlet UIButton *starButton; 

@end 

Там нет ничего в моем CustomCell.m

+0

Что CustomCell подкласс? – JoePasq

+0

@JoePasq UITableViewCell. – acecapades

ответ

10

В Interface Builder необходимо установить класс клетки к CustomCell и CustomCell должен иметь свойство title.

this class is not key value coding-compliant for the key …

Обычно означает, что свойство не найдено на классе и Interface Builder пытается использовать это свойство, в результате аварии.

+0

Да, я уже установил класс CustomCell.xib для CustomCell ...Вот почему я смог подключить все UILabels в CustomCell.m. – acecapades

+0

Почему у него есть свойство «title»? – acecapades

+1

... Я не знаю. Хм. Для «взрослых» просмотров обычно у всех есть заголовок, я не знаю, когда/где ячейки таблицы используют свой заголовок. – JoePasq

5

Я предполагаю, что вы получите эту ошибку, когда ваша ячейка загружена из NIB во время выполнения. (Если вместо того, чтобы это нарушение на какой строке кода вы имеете написанное, ради бога удалить эту строку кода!)

Перейти в поле зрения XIB вашего пользовательского ячейки, Ctrl щелкните на «владельца файла» и разъединить независимо соединение, которое вы получили там, называется «title». Если вы чувствуете себя неаккуратно, отсоедините все, а затем перемойте все, что захотите. Смотрите, если это очистит его. Если нет, я буду здесь несколько часов.

+1

Хорошая стратегия - см., Если свойство 'title' * подключено. – JoePasq

+0

Это почти всегда причина в этом сценарии! – lnafziger

+0

Да, ячейка загружается из среды выполнения NIB. Теперь он работает, когда я объявлял свойство, называемое «title» в файле заголовка. Я не знал, что свойство, называемое названием, должно быть объявлено. Спасибо @JoePasq. Я не видел этого во всех других вопросах, связанных с этим, здесь, в StackOverflow. – acecapades

13

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

В этом случае решение находится в Interface Builder

  1. Первое изменение владельца файла Идентичность класса для NSObject.
  2. Отсоедините каждый IBOutlet от владельца файла.
  3. Измените класс идентификации ваших пользовательских NIB на имя класса CustomTableViewCell.
  4. Ссылка на ваш IBOutlet здесь.

Всё.

+0

Если вы загружаете nib прямо в свой код ViewController и хотите иметь возможность написать следующий код. Ячейка MyCustomCell *; cell.customTextField.text.delegate = self; 'Это будет работать для вас. Также я думаю, что это имеет больше смысла, чем другие текущие ответы. –

+7

UILabels вашего CustomTablecell должны быть подключены к объекту UITableViewCell, а не к владельцу файла. Я забываю об этом каждый раз. Я не знаю, почему. – user798719

+0

Это должен быть принятый ответ здесь - по крайней мере, он решил проблему, которую я имел. – Gereon

0

Для моего случая XCode6.0.1, я очистить проект и все проходит гладко

Смежные вопросы

 Смежные вопросы