通貨換算アプリを作成していますが、最新の為替レートの保存に問題があります。ボタンを使用してアプリ内から手動で呼び出すことができる 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値を定義して配列に入れ、テーブルビューコントローラーで項目が選択されたときにメインビューコントローラーに送り返すだけです。