Pregunta

En el último par de semanas por fin he metido en Obj-C de C regular y he comenzado mi primera aplicación. He visto tutoriales y leer a través de un libro junto con una gran cantidad de páginas web, pero sé que he hecho más que comenzar. De todos modos, la mayor parte de la noche y esta mañana, he estado tratando de conseguir el código de trabajo, y ahora que se compilará, tengo algunas advertencias. He buscado y encontrado problemas similares con soluciones, pero todavía no hay dados. Lo que estoy tratando de hacer es poner una matriz hecha de un documento txt en la lista desplegable en un cuadro combinado.

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

Así, con todos estos errores y mis conocimientos todavía superficial de Obj-C, que debe estar haciendo algún tipo de error n00b.

Gracias por la ayuda.

¿Fue útil?

Solución

No parece ser un general gran cantidad de confusión en este punto, la mayoría manifiesta en su último (4) línea (s) de código. Usted es consciente de que la ':' símbolo se usa para pasar argumentos a los métodos, no termina una línea? Que son esencialmente de conexión en cadena de los últimos 4 líneas juntos de una manera que no tiene sentido. En cuanto a las advertencias específicas, getStringzFromTxtz es un método que ha definido en AwesomeBoxList, no es un método de NSComboBox. numberOfItemsInComboBox: y comboBox: objectValueForItemAtIndex: son conocer los protocolos de NSComboBoxDataSource , destinados a ser implementado por la clase en nombre de una NSComboBox, no métodos NSComboBox. Yo recomendaría hacer un poco de lectura sobre los delegados y Protocolos.

Para elaborar: Para que su clase AwesomeBoxList utilizar un NSComboBox, tiene que proporcionar información al cuadro combinado que las necesidades de cuadro combinado sepan. En el universo de Apple, situaciones como ésta normalmente se tratan con el Delegado de patrones de diseño . En concreto, las necesidades de cuadro combinado a saber número de elementos que se muestra , así como la representación de objeto para cada uno de los elementos que se muestran . El cuadro combinado declara la interfaz para hacer esto en el Protocolo NSComboBoxDataSource . Al proporcionar esta información, usted está actuando como el origen de datos para el cuadro combinado. Se puede decir que el cuadro combinado que debería aplazar a la clase de sus datos mediante el establecimiento de sí mismo como de su propiedad DataSource en Interface Builder o con una llamada a

[ComboBoz setDataSource:self];

desde algún lugar de la ejecución de su AwesomeBoxList. Esto asegurará que el cuadro combinado llama a los métodos de su clase para poblar en sí con la información. Hay dos métodos específicamente que la clase AwesomeBoxList debe poner en práctica, y que será llamado por el cuadro combinado:

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

Proporcionar una aplicación significativa es todo lo que necesita hacer para llenar su cuadro combinado con datos. No sé los detalles de lo que usted quiere aquí, pero eso es el patrón que desea seguir. Espero que ayude un poco más.

Otros consejos

Bueno, el getStringzFromTxtz No funcionará de ser enviado a una instancia NSComboBox como ese método se declara y define en su clase AwesomeBoxList. Este método no se puede encontrar en tiempo de ejecución.

Además, creo que es posible que necesite para conseguir su cabeza alrededor de delegados y fuentes de datos - los otros métodos son parte del protocolo NSComboBoxDataSource. Echa un vistazo a la Guía de Programación cuadro combinado en la documentación de ejemplos.

No existen esos métodos. Consulte la documentación para obtener más NSComboBox información.

En lugar de:

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

Trate:

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

Además, nota que la convención plataforma es utilizar una letra minúscula al comienzo de una Ivar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top