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、返したい分数を正しく表示していますが、outputFractionnull です。

ポインタの問題だと思います。を試し*myStringましたが、コンパイラがエラーをスローします (互換性のない型)。

どんな提案でも大歓迎です。

4

4 に答える 4

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 が作成したこの Objective-C Primerを読むことをお勧めします。

于 2010-12-08T23:51:01.540 に答える
1

outputFraction をどこで定義しますか? 上記のコードのどこにも言及していません。

推測では、変換メソッドは (void) として宣言されているため、何も返されません。結果を NSString として返す必要がある場合は、次のように宣言します

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

そして、メソッドの最後に到達する前に NSString を返すようにしてください

return MyNSStringVariable;

[編集]

メソッドによって outputFraction が返されることを望んでいることがわかりますが、Objective-C の場合はそうではありません (Pascal についてはわかりません)。メソッドの 2 番目の変数として 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 を返したくない場合は、関数に NSString ポインターへのポインターを渡すことができます (NSFileManager メソッドなどのいくつかの標準 API 呼び出しに NSError** を渡すのと同じ方法)。コードは次のようになります。

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 に答える
0

文字列を返さないのはなぜですか?

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

ところで: ObjC を真剣に読み込む必要があります。古いパスカルの知識を ObjC で使用しようとしないでください。それは違います。あなたの知識は実際には当てはまりません。

ObjC に関する本を購入するか、ObjC に関する優れたチュートリアルを読むことをお勧めします。(Apple自体には非常に優れたものがあります)

于 2010-12-08T23:47:06.033 に答える