J'ai une classe qui contrôle une fenêtre, et une autre classe qui contrôle une fenêtre différente dans le même xib, cependant, la deuxième fenêtre n'affiche jamais ce qu'elle devrait.Classe Cocoa ne pas afficher de données dans NSWindow
Dans la première classe je alloue et init la seconde classe, puis lui passe des informations. Dans la deuxième classe, il affiche ces données dans la vue tableau.
Oui, dans le .xib j'ai toutes les connexions correctement configurées, j'ai quadruple vérifié. Aussi le code est correct, même avec les connexions, j'ai quadruple vérifié.
Éditer: et oui, il y a des données dans les tableaux, et les classes sont des objets NSO.
Édition2: J'ai trouvé le problème. Pour une raison quelconque, le tableau est rempli de contenu, mais il retourne 0 comme un nombre.
Modifier 9000:
Voici le code:
Answer.h
#import <Cocoa/Cocoa.h>
@interface MSAnswerView : NSObject {
IBOutlet NSWindow *window;
NSArray *User;
NSArray *Vote;
NSArray *Text;
IBOutlet NSTableView *view;
IBOutlet NSTableColumn *voteCount;
IBOutlet NSTableColumn *saidUser;
IBOutlet NSTextView *body;
}
-(void)setUpWithVoteCount:(NSArray *)array User:(NSArray *)user Text:(NSArray *)text;
@property (nonatomic, retain) NSWindow *window;
@property (nonatomic, retain) NSTableView *view;
@property (nonatomic, retain) NSTableColumn *voteCount;
@property (nonatomic, retain) NSTableColumn *saidUser;
@property (nonatomic, retain) NSTextView *body;
@end
.m
#import "MSAnswerView.h"
@implementation MSAnswerView
@synthesize view;
@synthesize voteCount;
@synthesize saidUser;
@synthesize body;
@synthesize window;
-(void)awakeFromNib
{
[view setTarget:self];
[view setDoubleAction:@selector(bodydata)];
[view reloadData];
}
-(void)setUpWithVoteCount:(NSArray *)array User:(NSArray *)user Text:(NSArray *)text
{
Vote = array;
User = user;
Text = text;
if (window.isVisible = YES) {
[view reloadData];
[view setNeedsDisplay];
}
}
-(int)numberOfRowsInTableView:(NSTableView *)aTable
{
return [User count];;
}
-(id)tableView:(NSTableView *)aTable objectValueForTableColumn:(NSTableColumn *)aCol row:(int)aRow
{
if (aCol == voteCount)
{
return [Vote objectAtIndex:aRow];
}
else if (aCol == saidUser)
{
return [User objectAtIndex:aRow];
}
else
{
return nil;
}
}
-(void)bodydata
{
int index = [view selectedRow];
[body setString:[Text objectAtIndex:index]];
}
@end
Il est difficile répondre aux questions sur le code en aveugle. Veuillez poster un cas de test minimal et des captures d'écran d'IB. – outis
C'est facile. C'est causé par un bug dans votre programme. Tout ce que vous devez faire est de corriger le bug et votre programme fonctionnera comme prévu. – JeremyP
J'ai posté le code. La méthode setUp est appelée dans une classe différente et met les données dans les tableaux. –