2012-05-22 2 views
2

ОБНОВЛЕНИЕ: Я решил начать с тех пор, пока я был на ранней стадии этого приложения. Я повторил все, и по какой-то причине пользовательская ячейка заняла второй раз. Я буду хранить старые файлы, чтобы подтвердить другой ответ, так как я полагаю, что я не единственный, у кого будет эта проблема.Пользовательская ячейка таблицы: «класс не соответствует ключевому значению, кодируемому»

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

[<SongsTVC 0x6831330> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key albumLabel. 

Я использую this tutorial и использовал ее раньше (изменил несколько вещей для АРК и прошивки 5) с успехом. Фактически, код и формат IB, которые я использую, основаны на уже работающем проекте, который у меня есть. Я знаю об этой ошибке, которая обычно появляется, когда вы подключаете свои выходы к владельцу файла, а не к самой ячейке. Я не делаю эту ошибку, но она все еще дает мне эту ошибку. До сих пор я удалил ярлык, с которым он столкнулся, и даже полностью удалил файлы ячейки, чтобы начать все заново. Любая помощь будет оценена по достоинству.

SongCell.h

#import <UIKit/UIKit.h> 

@interface SongCell : UITableViewCell{ 

} 

@property(nonatomic, assign) IBOutlet UILabel *titleLabel; 
@property(nonatomic, assign) IBOutlet UILabel *artistLabel; 
@property(nonatomic, assign) IBOutlet UILabel *albumLabel; 

@end 

SongCell.m

#import "SongCell.h" 

@interface SongCell() 

@end 

@implementation SongCell 

@synthesize titleLabel, artistLabel, albumLabel; 

@end 

SongsTVC.h - заголовок TableViewController

#import <UIKit/UIKit.h> 

@interface SongsTVC : UITableViewController{ 
    UINib *cellLoader; 
} 

@end 

SongsTVC.m - Соответствующие методы TableViewController

#import "SongsTVC.h" 
#import "SongCell.h" 

@interface SongsTVC() 

@end 

static NSString *CellClassName = @"SongCell"; 

@implementation SongsTVC 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
     cellLoader = [UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]]; 
    } 
    return self; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    SongCell *cell = (SongCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName]; 

    if (!cell) 
    { 
     //CRASH ERROR POINTS HERE 
     NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil]; 
     cell = [topLevelItems objectAtIndex:0]; 
    } 

    // Configure the cell... 
    cell.titleLabel.text = @"SONG"; 
    cell.artistLabel.text = @"Artist"; 
    cell.albumLabel.text = @"Album"; 

    return cell; 
} 

Interface Builder The cell, its outlets, and its class


File's owner

Report

ПРИМЕЧАНИЕ: Идентификатор ячейки был установлен в «SongCell» в IB, а владелец файла - UITableViewController, потому что в этой ячейке будет использоваться несколько таблиц. Пока представление представляет собой таблицу, оно должно работать (оно было в прошлом).


UPDATE: Файл XIB в формате XML был pasted here.

+0

Где именно создается метод Определяется методом One? – rishi

+0

@rishi Это метод экземпляра UINib, определенный Apple [здесь] (http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UINib_Ref/Reference/Reference.html#//apple_ref/ОКК/instm/UINib/instantiateWithOwner: варианты :). – Squatch

+0

Спасибо, я не знал об этом, поэтому перед возвратом массива он сбой или он возвращает массив? – rishi

ответ

1

К сожалению, единственным решением, которое я нашел, должно было начаться. Я делал все точно так же, как и раньше, и работал во второй раз. Это была довольно сложная задача, чтобы полностью отказаться от всего и начать все сначала, но это был единственный способ заставить его работать. Я оставляю это как ответ, если кто-то не может понять, что произошло. (См. Оригинал сообщения и его обновление)

2

сегодня я имел эту точно проблему, делая образец проекта для другого SO ответа! Похоже, ваш xib пытается подключить выход к контроллеру вашего вида вместо вашей ячейки. На скриншоте выходы выглядят правильно определенными, но иногда старое определение выходных данных может оставаться в базовом XML и вызывать этот тип сбоя.

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

Возможно, вам удастся найти его, открыв xib как «исходный код», найдите элемент и проверьте, есть ли только те записи, которые вы ожидаете. Возможно, ищите файл XML для albumLabel.

Если это не сработает, возможно, вам придется отказаться от xib и начать заново.

+0

Проверка Теперь я дам вам знать, что я нахожу. – Squatch

+0

Я прочесываю это и, кажется, в правильной форме. только 4 экземпляра albumLabel появляются в XML и кажутся прекрасными. Я добавил ссылку pastebin.com на исходный вопрос. Я продолжу поиск, но, возможно, вы увидите его сначала, если вы столкнетесь с этим раньше (если вы 't mind) – Squatch

+0

Не вижу ничего необычного там, извините. У вас действительно есть какие-либо соединения или ссылки на владельца файла? Не могли бы вы загрузить nib с nil как владелец? – jrturton

0

У меня была аналогичная проблема, и я смог ее решить, восстановив Раскадровка/NIB.