Pregunta

Esta es mi primera pregunta así que por favor me perdone si es obvio. Aprendí a programar en Pascal hace unos años, por lo que mi terminología puede estar apagado. He mirado en un montón de anuncios, pero nada parece hacer frente a mi problema de fondo.

Tengo una tabla de búsqueda que utilizo para convertir de nuevo decimales en fracciones. Estoy llamando a este método ...

-(void) convertToFractions:(float *)float2 aString:(NSMutableString *) myString;

... con esto ..

[self convertToFractions:&float1 aString:outputFraction]; 

La idea es que float2 es el decimal que Paso al método, y myString es la fracción de vuelta.

Este carreras después de las operaciones de búsqueda:

myString = [NSString stringWithString:[[decimalInchArray objectAtIndex:x]objectAtIndex:1]];
NSLog(@"myString = %@",myString);

El myString espectáculos de registro es la fracción correcta es decir myString se muestra correctamente la fracción quiero volver, pero outputFraction es nulo.

Creo que es un problema de puntero. Probé *myString, pero el compilador genera un error (tipos incompatibles).

Cualquier sugerencia es muy apreciado.

¿Fue útil?

Solución

¿Dónde definir su outputFraction? En ninguna parte en el código anterior lo mencionas.

En un método de adivinar su conversión se declara como (void) lo que significa que no devuelve nada. Si lo necesita para devolver el resultado como un NSString os lo anunciará como

-(NSString*) convertToFractions:(float *)float2 aString:(NSMutableString *) myString;

y asegúrese de que devuelva un NSString antes de llegar al final del método con

return MyNSStringVariable;

[EDIT]

Puedo ver que usted está esperando que outputFraction será devuelto por el método, pero que no es el caso con Objective-C (no estoy seguro acerca de Pascal). Simplemente estás pasando outputFraction como una segunda variable en su método.

Así que la forma "correcta" de hacerlo sería tener un método

-(NSString*)convertToFraction:(float*)float2 {
     ...// Do your float to fraction calculation here
     ...// Make sure fraction is formatted as NSString
     return YourFractionVariable;
}

A continuación, puede asignar el valor devuelto a una variable de su elección, por ejemplo:

NSString *fraction = [self converToFraction:aFloatNumber];
NSLog (@"fraction is %@", fraction);

Cheers, Rog

Otros consejos

desea cambiar la salida de su método de convertToFractions void a NSString. Se vuelve nula debido a que el tipo de retorno de su método, es void, por lo que no devuelve nada.

El tipo de retorno de un método objetivo-C está en el paréntesis, en el principio del nombre de método.

A continuación, es un ejemplo, pero no veo donde se define convertToString así, voy a utilizar pseudocódigo.

- (NSString *) convertToFractions:(float *)float2{
  NSString *fraction = *some code to lookup fraction from table;*
  return fraction;
}

myString = [self convertToFractions:(float *)float2];

EDIT:

Como otros han sugerido, usted debe dar a Objective-C un aspecto fresco. Le sugiero que lea este Objective-C Primer escrito por apple.

¿Por qué no devolver la cadena?

- (NSString*)convertToFractions:(float)float {
    //Bla bla do everything
    return [myString autorelease]; //Autorelease is for memory-management
}

Por cierto: ¿En serio necesita leer en ObjC. Por favor, no trate de usar su vieja Pascal en el conocimiento de ObjC. Es diferente, y su conocimiento no es realmente aplicable.

Yo recomendaría la compra de un libro sobre ObjC o leer algunos buenos tutoriales para ello. (La propia Apple tiene algunos muy buenos)

Si no desea volver NSString de su método que otros sugirieron que puede pasar un puntero a puntero NSString a su función (de la misma manera que pase NSError ** en cierta API estándar callsm por ejemplo, en métodos NSFileManager). Su código será algo como:

NSString *outputFraction;
[self convertToFractions:&float1 aString:&outputFraction];

-(void) convertToFractions:(float *)float2 aString:(NSMutableString **) myString{
  ...
   if (myString)
      *myString = [NSString stringWithString:[[decimalInchArray objectAtIndex:x]objectAtIndex:1]];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top