2013-11-01 2 views
7

У меня есть подробный экран какого-либо объекта в моем проекте (это «фото», на самом деле), который может иметь комментарии. Если это так, на экране отображается 3 последних и кнопка «Просмотреть все». Проблема заключалась в том, как отобразить эти 3 комментария. (На Android я просто использую LinearLayout для этого.) TableView не подходит, как я вижу (из-за статической высоты), поэтому я решил создать свой собственный шаблон/частичный вид CommentView и добавить его в scrollView для каждого комментария.Этот класс не является ключевым значением, совместимым с кодировкой для ключа ... снова

Я создал XIB-файл с видом и некоторыми дочерними элементами управления (пользовательская фотография, имя пользователя, дата, текст). Кроме того, я создал класс CommentView, доставленный из UIView. У владельца файла установлено значение CommentView. Класс представления верхнего уровня также установлен в CommentView (я пробовал различные комбинации). Я создал выход из представления верхнего уровня (vContent) и всех дочерних представлений.

Это CommentView.h:

@interface CommentView : UIView 

@property (strong, nonatomic) IBOutlet CommentView *vContent; 
@property (weak, nonatomic) IBOutlet UIImageView *ivUserPhoto; 
@property (weak, nonatomic) IBOutlet UILabel *lUserName; 
@property (weak, nonatomic) IBOutlet UILabel *lCreated; 
@property (weak, nonatomic) IBOutlet UILabel *lText; 


@end 

Это CommentView.m:

#import "CommentView.h" 

@implementation CommentView 

-(void)awakeFromNib { 
    [[NSBundle mainBundle] loadNibNamed:@"CommentView" owner:self options:nil]; 
    [self addSubview: self.vContent]; 
} 

@end 

Затем я попытался добавить комментарии в поле зрения лица и получил эту ошибку с заголовком вопроса. Это не первый раз, когда я получил его, но сейчас я действительно не знаю, в чем проблема ...

Ошибка происходит на этой линии (я называю это из PhotoViewController):

CommentView *commentView = [[[NSBundle mainBundle] loadNibNamed:@"CommentView" owner:self options:nil]objectAtIndex:0]; 

enter image description here

Полный текст: '[setValue: forUndefinedKey:]: этот класс не является ключевым для кодирования ключа для ключа ivUserPhoto.'

Я очень ценю вашу помощь! Спасибо!

+0

У вас посмотрел МНОГИЕ существующие вопросы, охватывающие это же сообщение об ошибке? – rmaddy

+0

Да. Я много красных, прежде чем опубликовал этот вопрос. Кроме того, у меня эта ошибка много раз, но только на этот раз я не знаю, в чем причина ... –

+0

Причина проста. 'PhotoViewController' не является' CommentView', но где-то (предположительно, ваш nib) вы рассматриваете его как таковой. –

ответ

7

Я нашел еще один пример. Поэтому я переписать мой CommentView.m как это ...

@implementation CommentView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 

    if (self) { 
     NSArray *nibContents = [[NSBundle mainBundle]loadNibNamed:@"CommentView" owner:self options:nil]; 
     [self addSubview:nibContents[0]]; 
    } 

    return self; 
} 

@end 

... и как я добавляю подвидов, как это:

CommentView *commentView = [[CommentView alloc]initWithFrame:CGRectMake(0, 0, 320, 81)]; 

commentView.lUserName.text = comment.user.name; 
[self.vComments addSubview:commentView]; 

Сейчас он работает, как я ожидал.

Я до сих пор не в полной мере понять, почему есть много примеров, как в моем вопросе, и почему он не работает для меня ... Я надеюсь, что мой код будет сэкономить время для кого-то ...

+0

Это просто спасло мой бекон! Я видел много похожих ответов по разным вопросам, но ключ для меня нужно было называть 'loadNibNamed', а не' instantiateWithOwner', который используется в других случаях. Спасибо! – dustinrwh

0

Эта проблема означает, что ваш xib имеет некорректное отображение. Обычно это происходит, когда вы меняете имя свойства.

Чтобы быть уверенным, что вы не пропустите эту проблему, перейдите к файлу XIb, отключить все выходы и отобразить их снова

+0

Я сделал это несколько раз, прежде чем размещать вопрос :( –

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

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