1

通貨換算アプリを作成していますが、最新の為替レートの保存に問題があります。ボタンを使用してアプリ内から手動で呼び出すことができる applicationDidUpdateCurrency というメソッドがあります。このメソッドは最新の為替レートを取得し、配列に追加します。次に、NSArray からの項目が float 値に移動されてからコンソールに記録される一連のステートメントをアプリにループさせます。それはすべてうまくいきます。

+(void)applicationDidUpdateCurrency
{
    NSError *error;

    // Load .csv file. 

    NSString *allStates = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=USDUSD=X,CNYUSD=X,GBPUSD=X,EGPUSD=X,CADUSD=X,EURUSD=X,&f=sl1d1t1ban&e=.csv"] encoding:NSUTF8StringEncoding error:&error];

    // Remove all quotes from file, replace them with nothing. 

    NSString *strippedPartOne = [allStates stringByReplacingOccurrencesOfString:@"\"" withString:@""];

    // Remove excess new lines from the csv file. 

    NSString *strippedPartTwo = [strippedPartOne stringByReplacingOccurrencesOfString:@"\r" withString:@""];

    // Add strippedPartTwo to array. 

    NSArray *rows = [strippedPartTwo componentsSeparatedByString:@"\n"];


    //   NSArray *components;

    for(int i=0; i<[rows count]; i++)
    {        
        components = [[rows objectAtIndex:i] componentsSeparatedByString:@","];

        // NSLog(@"Conversion: %@ Value: %@", [components objectAtIndex:0], [components objectAtIndex:1]);


        if ([[rows objectAtIndex:i] isEqualToString:@""]) {
            continue;
        }

        if (i==0) {
            float floatUSD = 1;

            NSLog(@"USD2: %f", floatUSD);
            continue;
        }

        if (i==1) {  
            float beforeFloatCNY = [[components objectAtIndex:1] floatValue];
            float floatCNY = 1 / beforeFloatCNY;
            NSLog(@"CNY2: %f", floatCNY);
        }

        if (i==2) {  
            float beforeFloatGBP = [[components objectAtIndex:1] floatValue];
            float floatGBP = 1 / beforeFloatGBP;
            NSLog(@"GBP2: %f", floatGBP);
        }

        if (i==3) {  
            float beforeFloatEGP = [[components objectAtIndex:1] floatValue];
            float floatEGP = 1 / beforeFloatEGP;
            NSLog(@"EGP2: %f", floatEGP);
        }

        if (i==4) {  
            float beforeFloatCAD = [[components objectAtIndex:1] floatValue];
            float floatCAD = 1 / beforeFloatCAD;
            NSLog(@"CAD2: %f", floatCAD);
        }

        if (i==5) {
            float beforeFloatEUR = [[components objectAtIndex:1] floatValue];
            float floatEUR = 1 / beforeFloatEUR;
            NSLog(@"EUR2: %f", floatEUR);
        }



    }

}

このメソッドは、通貨のリストを持つテーブル ビュー コントローラーに関連付けられている同じファイルにあります。これらの値をその配列に戻して、デリゲートを使用してメインのビュー コントローラーに簡単に送り返すことができるようにするだけです。

applicationDidUpdateCurrency メソッドが呼び出された後、単純な NSLog(@"USD2: %f", floatUSD); には見えません。その値を再度表示します。定義された直後に正しくログに記録されますが、次の if ステートメントの後でも 0.000000 と表示されます。

このコードを使用して、.h ファイルで floatX 値を宣言します。

@property (nonatomic, assign) float floatUSD;

誰でもこれで私を助けてくれますか? float値を定義して配列に入れ、テーブルビューコントローラーで項目が選択されたときにメインビューコントローラーに送り返すだけです。

4

1 に答える 1

1

変数を再宣言しているため、新しく宣言された変数 (現在は最も内側のスコープにある) がインスタンス変数を隠しているためです。(警告をオンにしてこれをコンパイルすると、これに関するいくつかの警告が表示されます)。必要ありません。実際、これらを再宣言するべきではありません。

さらに、バッキング インスタンス変数ではなく、プロパティ自体にアクセスします。つまり、全体として、代わりに

float floatUSD = 1;

書きます

self.floatUSD = 1;
于 2012-12-09T14:59:06.340 に答える