En rapport avec Cocoa par la pratique . (chap 5)

CrazyJoCrazyJo Membre
février 2008 modifié dans API AppKit #1
Bonjour,  8--)
- (int)tableView:(NSTableView *)aTableView<br />		objectValueForTableColumn:(NSTableColumn *)aTableColumn<br />		row:(int)rowIndex<br />{<br />	NSString *identifier = [aTableColumn identifier];<br />	Cassette *cassette = [cassettesArray objectAtIndex:rowIndex];<br />	return [cassette valueForKey:identifier]; // ici 2 même warning: return makes integer from pointer without a cast<br />}<br />

Pourquoi il me met cette erreur. Pour info c'est par rapport au chap5 dans cocoa par la pratique ou on traite les nstableview. J'ai fait leur exemple et là  j'essaie de refaire un autre projet en ajoutant plus de chose( colonnes ..). Le code du livre est celui-ci:
- (id)tableView:(NSTableView *)aTableView<br />		objectValueForTableColumn:(NSTableColumn *)aTableColumn<br />		row:(int)rowIndex<br />{<br />	// quel est l&#39;identificateur de la colonne ?<br />	NSString *identifier = [aTableColumn identifier];<br />	// quelle personne ?<br />	Person *person = [employees objectAtIndex:rowIndex];<br />	//quelle est la valeur de l&#39;attribut qualifié d&#39;identificateur ?<br />	return [person valueForKey:identifier];<br />}<br />
c'est le même que le miens ... je ne comprends donc pas ce qui cloche . C'est le seul warning que j'ai .

Réponses

  • gogaulegogaule Membre
    18:47 modifié #2
    Bonsoir .
    Cassette *cassette = [cassettesArray objectAtIndex:rowIndex];

    Un s en trop sur la ligne d'avant  et  Array ? . ? A chaque fois que j'avais un prob c'était une faute .
    Cordialement.
  • CrazyJoCrazyJo Membre
    18:47 modifié #3
    non je ne crois pas que c'est cela. J'ai deux variables différentes (comme dans le 2ème example de mon post). La première cassette est un variable qui pointe sur l'objet Cassette et la variable cassettesArray est le nom de mon pointeur qui pointe sur mon NSTableView. Je dois bien avoir deux variables différentes.
  • 18:47 modifié #4
    À mon avis, tu te concentrais trop sur une erreur dans ton code alors que l'erreur est dans le premier mot.
  • gogaulegogaule Membre
    18:47 modifié #5
    Re
    (id) (int) +
    Cordialement.
  • CrazyJoCrazyJo Membre
    18:47 modifié #6
    Aie Aie Aie ... ca fait vraiment mal ! :'(   ca fait depuis hier que je cherchais  :o bon bin merci  :)
  • CrazyJoCrazyJo Membre
    18:47 modifié #7
    Ici j'ai deux trois soucis de compréhension .
    + (void)initialize { // pourquoi un + et pas un - ? <br />	// C&#39;est quoi dictionary , pourquoi ici y&#39;a pas [[NSMutableDictionary alloc]init];<br />	NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];<br />	// archiver l&#39;object couleur // A. Hillgass dit que dans les prochaines version de os x on ne serait peut - être plus obligé d&#39;archiver l&#39;objet. Alors est-ce possible ?<br />	NSData *colorAsData = [NSArchiver archivedDataWithRootObject:[NSColor whiteColor]];<br />	<br />	[defaultValues setObject:colorAsData forKey:SMTableBgColorKey];<br />	[defaultValues setObject:[NSNumber numberWithBool:YES] forKey:SMEmptyDocKey];<br />	// Et cette ligne est donc pour régler les préfs par défault ?<br />	[[NSUserDefaults standardUserDefaults]registerDefaults:defaultValues];<br />	NSLog(@&quot;Préférences par défault : %@&quot;,defaultValues);<br />}<br />
    

    Merci 
  • psychoh13psychoh13 Mothership Developer Membre
    18:47 modifié #8
    Le + signifie que la méthode est une méthode de classe. Et la méthode initialize est appelée par le runtime juste avant que la classe (ou l'un de ses objets) reçoivent son premier message.

    Et oui, ça permet de régler les préférences par défaut.
  • AliGatorAliGator Membre, Modérateur
    18:47 modifié #10
    Pour la question sur "c'est quoi dictionary" :

    [tt]d = [NSMutableDictionary dictionary][/tt] est un synonyme (on appelle ça un "constructeur de commodité") exact de : [tt]d = [[[NSMutableDictionary alloc] init] autorelease];[/tt].
    C'est expliqué dans la doc de NSDictionary et NSMutableDictionary, mais de toute façon c'est une règle plutôt générale : il existe souvent une méthode qui porte le même nom que la classe ("le "NS" en moins et avec une minuscule), qui sert de constructeur de commodité, et équivaut à  alloc+init+autorelease.
    Ainsi tu as le même principe avec [tt]NSString* s = [NSString string];[/tt] équivalent à  [tt]NSString* s = [[[NSString alloc] init] autorelease][/tt] ou [tt]NSString* s = [NSString stringWithFormat:@%d éléments,5];[/tt] équivalent à  [tt]NSString* s = [[[NSString alloc] initWithFormat:@%d éléments,5] autorelease][/tt].
Connectez-vous ou Inscrivez-vous pour répondre.