Objective C问题:方法不会返回字符串

时间:2010-12-08 23:43:03

标签: objective-c pointers parameters methods nsmutablestring

这是我的第一个问题,如果显而易见,请原谅我。几年前我学会了在Pascal编程,所以我的术语可能会关闭。我看了很多帖子,但似乎没有解决我的基本问题。

我有一个查找表,用于将小数转换回分数。我在说这种方法......

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

......用这个......

[self convertToFractions:&float1 aString:outputFraction]; 

我的想法是float2是我传递给方法的小数,myString是返回的小数。

这在查找之后运行:

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

日志显示myString是正确的分数,即myString正确显示我想要返回的分数,但outputFraction为空。

我认为这是一个指针问题。我试过*myString,但编译器抛出错误(不兼容的类型)。

非常感谢任何建议。

4 个答案:

答案 0 :(得分:2)

您想要将convertToFractions方法的输出从void更改为NSString。 它返回null因为方法的返回类型是void,所以它什么都不返回。

Objective-C方法的返回类型位于括号中,位于方法名称的开头。

这是一个例子,但是我没看到你在哪里定义convertToString所以,我会使用伪代码。

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

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

编辑:

正如其他人所建议的那样,你应该给Objective-C一个新的面貌。我建议你阅读Apple撰写的this Objective-C Primer

答案 1 :(得分:1)

您在哪里定义outputFraction?在上面的代码中没有提到它。

猜测你的转换方法被声明为(void)意味着它不会返回任何内容。如果你需要它来返回结果作为NSString声明它像

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

确保在使用

到达方法结尾之前返回NSString
return MyNSStringVariable;

[编辑]

我可以看到你希望你的方法返回outputFraction,但Objective-C不是这样(不确定Pascal)。您只是将outputFraction作为方法中的第二个变量传递。

所以“正确”的做法是拥有一个方法

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

然后您可以将返回值分配给您选择的变量,例如:

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

干杯, ROG

答案 2 :(得分:0)

为什么不直接返回字符串?

- (NSString*)convertToFractions:(float)float {
    //Bla bla do everything
    return [myString autorelease]; //Autorelease is for memory-management
}
顺便说一下:你真的需要读进ObjC。请不要尝试在ObjC上使用旧的帕斯卡知识。这是不同的,你的知识并不适用。

我建议买一本关于ObjC的书或者阅读一些很好的教程。 (Apple本身有一些非常好的)

答案 3 :(得分:0)

如果您不想从方法中返回NSString,就像其他人建议的那样,您可以将指针传递给指向函数的NSString指针(就像在NSFileManager方法中将NSError **传递给某些标准api调用一样)。您的代码将类似于:

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

-(void) convertToFractions:(float *)float2 aString:(NSMutableString **) myString{
  ...
   if (myString)
      *myString = [NSString stringWithString:[[decimalInchArray objectAtIndex:x]objectAtIndex:1]];
}