2013-11-01 9 views
7

Ich habe einen Detailbildschirm einer Entität in meinem Projekt (es ist "Foto", tatsächlich), die Kommentare haben kann. Wenn dies der Fall ist, zeigt der Bildschirm 3 die neueste und die Schaltfläche "Alle anzeigen". Das Problem war, wie diese 3 Kommentare angezeigt werden. (Auf Android verwende ich einfach LinearLayout dafür.) TableView ist nicht geeignet, wie ich sehen kann (aufgrund der statischen Höhe), also habe ich beschlossen, meine benutzerdefinierte Vorlage/Teilansicht CommentView zu erstellen und sie für jeden Kommentar zu scrollView hinzuzufügen.Diese Klasse ist nicht Schlüsselcodierung-kompatibel für den Schlüssel ... wieder

Ich erstellte XIB-Datei mit Ansicht und einige untergeordnete Steuerelemente (Benutzerfoto, Benutzername, Datum, Text). Außerdem habe ich die Klasse CommentView erstellt, die von UIView geliefert wurde. Der Besitzer der Datei ist auf CommentView festgelegt. Die Klasse der Top-Level-Ansicht ist ebenfalls auf CommentView eingestellt (ich habe verschiedene Kombinationen ausprobiert). Ich habe Outlet aus der Top-Level-Ansicht (vContent) und aus allen untergeordneten Ansichten erstellt. Diese

ist 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 

Dies ist CommentView.m:

#import "CommentView.h" 

@implementation CommentView 

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

@end 

Dann habe ich versucht Kommentare in Unternehmens Ansicht hinzuzufügen und bekam diesen Fehler von Frage-Titel. Es ist nicht das erste Mal, dass ich es bekommen, aber jetzt weiß ich wirklich nicht, was das Problem ist ...

Fehler auf dieser Linie kommt (ich es von PhotoViewController nennen):

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

enter image description here

Der vollständige Text: '[setValue: forUndefinedKey:]: Diese Klasse ist nicht Schlüsselcodierung-kompatibel für den Schlüssel ivUserPhoto.'

Ich schätze Ihre Hilfe sehr! Vielen Dank!

+0

Sie haben die vielen vorhandenen Fragen zu dieser Fehlermeldung angeschaut? – rmaddy

+0

Ja. Ich habe viel vorher gepostet, bevor ich diese Frage gestellt habe. Auch habe ich diesen Fehler viele Male, aber nur dieses Mal weiß ich nicht, was der Grund ist ... –

+0

der Grund ist einfach. 'PhotoViewController' ist keine' CommentView', aber irgendwo (vermutlich in der Schreibspitze) behandeln Sie es als solches. –

Antwort

7

ich hier ein anderes Beispiel gefunden haben. So umschreiben ich meine CommentView.m so ...

@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 

... und die Art, wie ich hinzufüge Subviews wie folgt aus:

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

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

Jetzt Es arbeitet wie ich erwartet hatte.

ich immer noch nicht verstehen, warum viele Beispiele wie in meiner Frage gibt es und warum es nicht für mich arbeiten ... Ich hoffe, dass mein Code Zeit jemand retten ...

+0

Dies rettete nur meine Speck! Ich sah viele ähnliche Antworten auf verschiedene Fragen, aber der Schlüssel für mich war es "loadNibNamed" anstatt "instantiateWithOwner", was in anderen Fällen verwendet wird. Danke! – dustinrwh

0

Dieses Problem bedeutet, dass Ihr Xib eine falsche Zuordnung hat. Dies geschieht im Allgemeinen, wenn Sie den Namen einer Eigenschaft ändern.

Um sicherzustellen, dass Sie das Problem nicht verpassen, gehen Sie zu Ihrem xib Datei, trennen Sie alle Ausgänge und ordnet sie wieder

+0

Ich habe es einige Male vor dem Posten der Frage :( –

Verwandte Themen