0

这是我的第一个问题,所以如果很明显,请原谅我。几年前我学会了用 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

4 回答 4

2

您想将convertToFractions方法的输出从更改voidNSString。它返回 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 编写的Objective-C Primer 。

于 2010-12-08T23:51:01.540 回答
1

你在哪里定义你的输出分数?您在上面的代码中没有提到它。

猜测您的转换方法被声明为 (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);

干杯,罗格

于 2010-12-08T23:46:57.937 回答
0

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

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

顺便说一句:你真的需要阅读 ObjC。请不要尝试在 ObjC 上使用您的旧帕斯卡知识。它是不同的,你的知识并不真正适用。

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

于 2010-12-08T23:47:06.033 回答
0

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

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

-(void) convertToFractions:(float *)float2 aString:(NSMutableString **) myString{
  ...
   if (myString)
      *myString = [NSString stringWithString:[[decimalInchArray objectAtIndex:x]objectAtIndex:1]];
}
于 2010-12-08T23:50:48.730 回答