Question

pour les deux dernières semaines, je suis finalement entré dans Obj-C de C régulière et ai commencé ma première application. J'ai regardé des tutoriels et lu un livre avec beaucoup de pages Web, mais je sais que je ne font que commencer. Quoi qu'il en soit, pour la plupart de la nuit et ce matin, je l'ai essayé d'obtenir ce code au travail, et maintenant qu'il va compiler, j'ai quelques avertissements. Je l'ai cherché et trouvé des problèmes similaires avec des solutions, mais toujours pas de dés. Ce que je suis en train de faire est de mettre un tableau fait à partir d'un document txt dans la liste déroulante dans une zone de liste déroulante.

AwesomeBoxList.h:

    #import <Cocoa/Cocoa.h>
@interface AwesomeBoxList : NSObject 
{
  IBOutlet NSComboBox *ComboBoz;
}
-(NSArray *) getStringzFromTxtz;
- (void) awesomeBoxList;
@end

AwesomeBoxList.m:

#import "AwesomeBoxList.h"

@implementation AwesomeBoxList

-(NSArray *)getStringzFromTxtz 
{
...
return combind;
}

- (void) awesomeBoxList
{
 [ComboBoz setUsesDataSource:YES];


 [ComboBoz setDataSource:

[ComboBoz getStringzFromTxtz]: //'NSComboBox' may not respond to 'getStringzFromTxtz'

[ComboBoz comboBox:(NSComboBox *)ComboBoz objectValueForItemAtIndex: 

 [ComboBoz numberOfItemsInComboBox:(NSComboBox *)ComboBoz]]];


        /*'NSComboBox' may not respond to '-numberOfItemsInComboBox:'
   'NSComboBox' may not respond to '-comboBox:objectValueForItemAtIndex:'
   'NSComboBox' may not respond to '-setDataSource:'
  */
 }

@end

Alors, avec toutes ces erreurs et ma connaissance encore faible profondeur de Obj-C, je dois être fait une sorte d'erreur n00b.

Merci pour l'aide.

Était-ce utile?

La solution

Il ne semble pas être une quantité généralement de grande confusion, surtout manifestée dans votre dernière (4) résultat (s) de code. Vous savez que le « : » est le symbole utilisé pour transmettre des arguments aux méthodes, ne pas mettre fin à une ligne? Vous essentiellement daisy ces 4 enchaînez dernières lignes ensemble d'une manière qui n'a pas de sens. En ce qui concerne les avertissements spécifiques, getStringzFromTxtz est une méthode que vous avez défini sur AwesomeBoxList, pas une méthode de NSComboBox. numberOfItemsInComboBox: et comboBox: objectValueForItemAtIndex: sont délégué design Motif. Plus précisément, les besoins de zone de liste déroulante à savoir combien d'articles il montrera ainsi que la représentation de l'objet pour chacun des éléments affichés . La zone de liste déroulante déclare l'interface pour ce faire dans la Protocole NSComboBoxDataSource . En fournissant cette information, vous agissez en tant que source de données pour la zone de liste déroulante. Vous pouvez dire à la zone de liste déroulante qu'il doit remettre à votre classe pour ses données par vous-même la mise comme propriété dataSource dans Interface Builder ou avec un appel à

[ComboBoz setDataSource:self];

de quelque part dans la mise en œuvre de votre AwesomeBoxList. Cela fera en sorte que la zone de liste déroulante appelle des méthodes dans votre classe pour se remplir avec des informations. Il existe deux méthodes spécifiquement que votre classe AwesomeBoxList devrait mettre en œuvre, et qui sera appelé par la zone de liste déroulante:

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index {
    switch (index) {
        // Return some object that is represented by index in the combo box
    }
}

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
    // return theNumberOfItemsInYourComboBox;
}

Fournir une mise en œuvre effective est tout ce que vous devez faire pour remplir votre zone de liste déroulante avec des données. Je ne connais pas les détails de ce que vous voulez, mais c'est le modèle que vous voulez suivre. Hope qui aide un peu plus.

Autres conseils

Eh bien, la getStringzFromTxtz ne fonctionnera pas d'être envoyé à une instance NSComboBox comme cette méthode est déclarée et définie dans votre classe AwesomeBoxList. Cette méthode ne sera pas trouvée lors de l'exécution.

Aussi, je pense que vous devrez peut-être obtenir votre tête autour des sources de données et délégués - les autres méthodes font partie du protocole NSComboBoxDataSource. Consultez le Guide de programmation zone de liste déroulante dans la documentation des exemples.

Ces méthodes n'existent pas. Voir la documentation pour plus NSComboBox informations.

Au lieu de:

[ComboBoz 
 comboBox:(NSComboBox *)ComboBoz 
 objectValueForItemAtIndex:[ComboBoz numberOfItemsInComboBox:(NSComboBox *)ComboBoz]];

Essayez:

[[comboBox objectValues] objectAtIndex:[comboBox numberOfItems] - 1];

En outre, notez que la convention de plate-forme est d'utiliser une lettre minuscule au début d'un Ivar.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top