2010-12-08 20 views
0

這是我的第一個問題,所以請原諒我,如果它是明顯的。我在幾年前學會了在Pascal編程,所以我的術語可能會關閉。我看了一大堆貼子,但似乎沒有解決我的基本問題。Objective C問題:方法不會返回字符串

我有一個查找表,我用它將小數轉換回分數。我調用此方法...

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

歡迎來到SO,@Jeremy,發佈時請格式化您的代碼。另外,不要忘記選擇幫助你的答案。 – Moshe 2010-12-08 23:51:56

+2

雖然所有這些都是可以修復的,但請您自己幫忙,並在Objective-C中抓一本好的介紹手冊。 – Eiko 2010-12-08 23:52:02

+0

順便說一下:你的字符串不會改變,因爲你給傳入的變量賦值了一個新值,而不是改變它的內容。 – Eiko 2010-12-08 23:53:39

回答

1

你在哪裏定義你的outputFraction?在上面的代碼中沒有提到它。

在猜測你的轉換方法被聲明爲(void),這意味着它不會返回任何東西。如果你需要它返回的結果爲的NSString聲明它像

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

並確保您有

return MyNSStringVariable; 

[編輯]

到達方法結束前返回一個NSString我可以看到你希望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

+0

他大概從`aString:`參數獲取`myString`一些原因。 – BoltClock 2010-12-08 23:47:46

0

爲什麼不只是返回字符串?

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

btw:你真的需要讀入ObjC。請不要嘗試在ObjC上使用您的舊pascal知識。這是不同的,你的知識並不適用。

我會推薦購買一本關於ObjC的書或者閱讀一些很好的教程。(蘋果本身有一些非常好的)

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