Domanda

per l'ultimo paio di settimane ho finalmente ottenuto in Obj-C da regolare C e hanno iniziato la mia prima applicazione. Ho guardato tutorial e leggere un libro insieme a un sacco di pagine web, ma so che ho appena iniziato. In ogni caso, per la maggior parte della notte e questa mattina, ho cercato di ottenere questo codice al lavoro, e ora che compilerà, ho un paio di avvertimenti. Ho cercato e trovato problemi simili con soluzioni, ma ancora niente da fare. Quello che sto cercando di fare è mettere una matrice a base di un documento txt nella lista pop-up in una casella combinata.

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

Quindi, con tutti questi errori e la mia conoscenza ancora superficiale di Obj-C, che deve essere facendo una sorta di errore n00b.

Grazie per l'aiuto.

È stato utile?

Soluzione

Non ci sembra essere un generale grande quantità di confusione qui, per lo più si manifesta nella tua ultima (s) (4) linea di codice. Siete consapevoli che il ':' simbolo è utilizzato per passare gli argomenti ai metodi, non interrompere una linea? Si sono essenzialmente il collegamento in cascata quelle ultime 4 righe insieme in un modo che non ha senso. Per quanto riguarda le avvertenze specifiche, getStringzFromTxtz è un metodo definito sul AwesomeBoxList, non è un metodo di NSComboBox. numberOfItemsInComboBox: e comboBox: objectValueForItemAtIndex: sono metodi NSComboBoxDataSource protocollo , destinati ad essere implementato dalla classe per conto di un NSComboBox, non i metodi NSComboBox. Suggerirei di fare un po 'di lettura su delegati e protocolli.

Per elaborare: Affinché la classe AwesomeBoxList utilizzare un NSComboBox, deve fornire informazioni alla casella combinata che le esigenze della casella combinata di sapere. In Apple Universo, situazioni come questa sono in genere trattati con la Delegato Design Pattern . In particolare, le esigenze della casella combinata di sapere il numero di elementi che sarà in mostra e la rappresentazione oggetto per ciascuno degli elementi mostrati . La casella combinata dichiara l'interfaccia per fare questo nel NSComboBoxDataSource protocollo . Fornendo queste informazioni, si agisce come l'origine dati per la casella combinata. Si può dire la casella combinata che dovrebbe rinviare alla classe per i suoi dati impostando te stesso come la sua proprietà DataSource in Interface Builder o con una chiamata a

[ComboBoz setDataSource:self];

da qualche parte nella realizzazione del vostro AwesomeBoxList. Che farà in modo che la casella combinata chiama i metodi nella classe per popolare se stesso con informazioni. Ci sono due metodi specificamente che la classe AwesomeBoxList dovrebbe attuare, e che si chiamerà dalla casella combinata:

- (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;
}

Fornire un'implementazione significativa è tutto quello che dovete fare per popolare il casella combinata con i dati. Non conosco le specifiche di ciò che si vuole qui, ma che è il modello che si desidera seguire. Speranza che aiuta un po 'di più.

Altri suggerimenti

Bene, il getStringzFromTxtz non funzionerà di essere inviato a un'istanza NSComboBox come quel metodo viene dichiarato e definito nella classe AwesomeBoxList. Questo metodo non si troverà in fase di esecuzione.

Inoltre, penso che potrebbe essere necessario per ottenere la testa intorno delegati e fonti di dati - gli altri metodi sono parte del protocollo NSComboBoxDataSource. Controlla la casella combinata Guida di programmazione nella documentazione per gli esempi.

non esistono tali metodi. Vedere la documentazione per più NSComboBox informazioni.

Al posto di:

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

Prova:

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

Inoltre, nota che la convenzione piattaforma è quello di utilizzare una lettera minuscola all'inizio di un Ivar.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top