Frage

für den letzten paar Wochen habe ich endlich in Obj-C aus regulären C bekommen habe und habe meine erste App gestartet. Ich habe zusammen mit einer Menge von Web-Seiten in einem Buch sah Tutorials und lesen, aber ich weiß, ich habe gerade erst begonnen. Wie auch immer, für die meisten der Nacht und heute Morgen, ich habe versucht, diesen Code zur Arbeit zu kommen, und jetzt, wo es zu kompilieren, habe ich ein paar Warnungen habe. Ich habe gesucht und gefunden ähnliche Probleme mit Lösungen, aber immer noch keine Würfel. Was ich versuche einen Array aus einem txt-Dokument in die Popup-Liste in einem Kombinationsfeld zu tun ist, setzen.

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

Also, mit all dieser Fehler und meine noch seicht Kenntnisse Obj-C, ich muss eine Art von n00b Fehler machen.

Danke für die Hilfe.

War es hilfreich?

Lösung

Es scheint eine allgemein große Menge Verwirrung, hier zu sein, vor allem in Ihrem letzten manifestierte (4) Zeile (n) des Codes. Sie sind sich bewusst, dass das ‚:‘ Symbol Argumente Methoden verwendet wird passieren, keine Zeile enden? Sie sind im Wesentlichen Daisy die letzten 4 Zeilen in einer Weise zusammen verketten, die keinen Sinn macht. Für die spezifischen Warnungen, ist getStringzFromTxtz eine Methode, die Sie auf AwesomeBoxList definiert ist, kein Verfahren von NSComboBox. numberOfItemsInComboBox: und comboBox: objectValueForItemAtIndex: sind Methoden NSComboBoxDataSource Protocol , bestimmt durch Ihre Klasse im Auftrag eines NSComboBox, nicht NSComboBox Methoden umgesetzt werden. Ich würde empfehlen, ein wenig zu lesen auf Delegierten und Protokolle zu tun.

Um dies näher auszuführen: Damit Ihre AwesomeBoxList Klasse eine NSComboBox zu verwenden, braucht es Informationen zu dem Kombinationsfeld zu schaffen, dass die Bedürfnisse Kombinationsfeld zu kennen. In dem Apple-Universum, Situationen wie diese sind in der Regel mit dem Delegate Design Mustern behandelt. Insbesondere muss die Combo-Box wissen , wie viele Elemente wird es zeigen, sowie die Objektdarstellung für jede der gezeigten Elemente . Das Kombinationsfeld deklariert die Schnittstelle, dies zu tun in der NSComboBoxDataSource Protocol . Durch die Bereitstellung dieser Informationen, handeln Sie als Datenquelle für das Kombinationsfeld. Sie können der Combo-Box sagen, dass es durch das Setzen sich selbst als seine Eigenschaft datasource im Interface Builder oder mit einem Aufruf für seine Daten zu Ihrer Klasse verschieben sollte

[ComboBoz setDataSource:self];

von irgendwo in der Umsetzung Ihres AwesomeBoxList ist. Dadurch wird sichergestellt, dass die Combo-Box Methoden in der Klasse nennt sich mit Informationen zu füllen. Es gibt zwei Methoden spezifisch, dass Ihre AwesomeBoxList Klasse sollte implementieren, und die durch das Kombinationsfeld aufgerufen wird:

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

eine sinnvolle Implementierung Providing ist alles, was Sie tun müssen, um Ihre Combo-Box mit Daten zu füllen. Ich weiß nicht, die Besonderheiten von dem, was Sie hier wollen, aber das ist das Muster, das Sie folgen mögen. Hoffnung, die ein bisschen mehr hilft.

Andere Tipps

Nun, die getStringzFromTxtz nicht zu einer NSComboBox Instanz gesendet arbeiten, wie diese Methode deklariert und in Ihrer AwesomeBoxList Klasse definiert. Diese Methode wird zur Laufzeit nicht gefunden werden.

Außerdem glaube ich, müssen Sie möglicherweise Ihren Kopf um die Delegierten und Datenquellen zu erhalten - die anderen Methoden Teil des NSComboBoxDataSource Protokolls sind. Schauen Sie sich die Combo Box Programming Guide in der Dokumentation für Beispiele.

Diese Methoden sind nicht vorhanden. die NSComboBox Dokumentation finden Sie weitere Informationen.

Statt:

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

Versuchen Sie:

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

Beachten Sie auch, dass die Plattform Konvention ist am Anfang eines Ivar einen Kleinbuchstaben zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top