我正在制作货币转换器应用程序,我在存储最新汇率方面存在一些问题。我有一个名为applicationDidUpdateCurrency的方法,可以使用按钮从应用程序内部手动调用,或者通过单击“是”来启动应用程序。该方法获取最新的汇率并将其添加到数组中。然后我让app循环通过一系列语句,其中来自NSArray的项目被移动到浮点值,然后记录到控制台。所有这一切都很好。
+(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;
有人可以帮我解决这个问题吗?我只是尝试定义一个浮点值,将其放入一个数组中,并在表视图控制器中选择该项时将其发送回主视图控制器。
答案 0 :(得分:1)
因为您正在重新声明变量并且新声明的变量(现在在最里面的范围内)隐藏了实例变量。 (如果您在打开警告的情况下对此进行了编译,则会收到一些警告)。你不需要,事实上你应该不重新声明这些。
此外,访问属性本身,而不是后备实例变量。所以,总而言之,而不是
float floatUSD = 1;
写
self.floatUSD = 1;