Bonsoir,
Je suis en pleine lecture du livre de Hillegass, "Programmation Cocoa pour MacOS X", troisième édition. J'en suis rendu au chapitre 8 qui traite du NSArrayController. Histoire de m'entraîner un peu, je développe ma propre petite application qui a, comme but, de calculer les n premières valeurs de la suite de Fibonacci (n défini par l'utilisateur via un NSTextField).
Je développe une classe Fibonacci dont voici le code :
.h
.m
Cette classe fonctionne nickel en ligne de commande, par exemple.
Pour mon programme, le but est donc de remplir un NSTableView avec le contenu d'un NSMutableArray contenant donc des objets Fibonacci.
J'ai créé une classe AppController, que voici :
.h
.m
Vient ensuite IB. Je créé une instance de ma classe AppController, créé mes liaisons entre cette instances, le NSTextField et le NSButton qui lance la méthode -calculateSuite: . Test, tout marche nickel.
Là où ça se gâte, c'est pour afficher mon NSMutableArray suite dans le NSTableView. Je créé dans IB un object NSArrayController. Je bind le Content Array sur le model key path "suite" de File's Owner, comme décrit dans le livre ; puis je bind la première colonne du NSTableView à l'arrayController pour la valeur "indice", et la seconde colonne pour la valeur "valeur". Et là, au lancement du programme, *crac* :
Pourquoi j'ai cette erreur ? Je m'y prends mal ? Dois-je stopper toute tentative de développer en utilisant Cocoa et me remettre au QBasic sous DOS ?
Merci pour votre aide !
Je suis en pleine lecture du livre de Hillegass, "Programmation Cocoa pour MacOS X", troisième édition. J'en suis rendu au chapitre 8 qui traite du NSArrayController. Histoire de m'entraîner un peu, je développe ma propre petite application qui a, comme but, de calculer les n premières valeurs de la suite de Fibonacci (n défini par l'utilisateur via un NSTextField).
Je développe une classe Fibonacci dont voici le code :
.h
Bloc de code:
#import <Foundation/Foundation.h>
@interface Fibonacci : NSObject {
int indice;
int valeur;
}
@property(readwrite, assign) int indice;
@property(readwrite, assign) int valeur;
- (id)initWithIndex:(int)index;
@end
.m
Bloc de code:
#import "Fibonacci.h"
@implementation Fibonacci
@synthesize indice;
@synthesize valeur;
- (id)init
{
[self dealloc];
@throw [NSException exceptionWithName:@"BNRBadInitCall" reason:@"Bad initalizer called" userInfo:nil];
return nil;
}
- (id)initWithIndex:(int)index
{
[super init];
[self setIndice:index];
int prev = 1, ante = 1;
if (index < 2) valeur = 1;
else {
int i;
int tmp;
for (i = 2 ; i <= index ; i++) {
tmp = ante + prev;
ante = prev;
prev = tmp;
}
valeur = tmp;
}
return self;
}
- (NSString *)description
{
NSString *ret = [[NSString alloc] initWithFormat:@"Indice %d = %d", [self indice], [self valeur]];
return ret;
}
@end
Cette classe fonctionne nickel en ligne de commande, par exemple.
Pour mon programme, le but est donc de remplir un NSTableView avec le contenu d'un NSMutableArray contenant donc des objets Fibonacci.
J'ai créé une classe AppController, que voici :
.h
Bloc de code:
#import <Cocoa/Cocoa.h>
@class Fibonacci;
@interface FibonacciController : NSObject {
IBOutlet NSTextField *fibonacciInput;
IBOutlet NSTableView *sortie;
NSMutableArray *suite;
}
- (IBAction) calculateSuite:(id)sender;
@end
.m
Bloc de code:
#import "FibonacciController.h"
#import "Fibonacci.h"
@implementation FibonacciController
- (id)init
{
[super init];
suite = [[NSMutableArray alloc] init];
return self;
}
- (IBAction)calculateSuite:(id)sender
{
int indice = [fibonacciInput intValue];
int i;
for (i = 0 ; i < indice ; i++) {
Fibonacci *thisFibonacci = [[Fibonacci alloc] initWithIndex:i];
[suite addObject:thisFibonacci];
NSLog(@"%@", thisFibonacci);
}
// Test
NSLog(@"%@ : %@", [suite valueForKeyPath:@"indice"], [suite valueForKeyPath:@"valeur"]);
[sortie reloadData];
}
@end
Vient ensuite IB. Je créé une instance de ma classe AppController, créé mes liaisons entre cette instances, le NSTextField et le NSButton qui lance la méthode -calculateSuite: . Test, tout marche nickel.
Là où ça se gâte, c'est pour afficher mon NSMutableArray suite dans le NSTableView. Je créé dans IB un object NSArrayController. Je bind le Content Array sur le model key path "suite" de File's Owner, comme décrit dans le livre ; puis je bind la première colonne du NSTableView à l'arrayController pour la valeur "indice", et la seconde colonne pour la valeur "valeur". Et là, au lancement du programme, *crac* :
this class is not key value coding-compliant for the key suite.
Pourquoi j'ai cette erreur ? Je m'y prends mal ? Dois-je stopper toute tentative de développer en utilisant Cocoa et me remettre au QBasic sous DOS ?
Merci pour votre aide !