这是我的第一个问题,如果显而易见,请原谅我。几年前我学会了在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
,但编译器抛出错误(不兼容的类型)。
非常感谢任何建议。
答案 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;
确保在使用
到达方法结尾之前返回NSStringreturn 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]];
}