适用于iOS模拟器但不适用于iOS设备?

时间:2012-03-26 21:20:03

标签: iphone objective-c ios xcode

编辑:它有效,但完成需要很长时间。 这是正常的,还是有办法优化它?

由于

我在我的项目中使用DDUnitConverter转换货币。

在iOS模拟器上一切正常,但在我尝试转换iOS设备(iPhone 4 iOSv5.1)上的货币时挂起。我环顾四周找到了解决这个问题的方法,但找不到任何东西。这是我用来兑换货币的代码。 DDUnitConverter中的代码可在此处获取:https://github.com/davedelong/DDUnitConverter/downloads

if ([Number.text isEqualToString:@""] || [picklable.text isEqualToString:@"no selection"] || [picklable2.text isEqualToString:@"no selection"]) {
    return;
}

if ([Number.text isEqualToString:@"0"]) {
    Result.text = @"0";
    return;
}

int fromType;
int toType;

fromType = [list indexOfObject:picklable.text];
toType = [list indexOfObject:picklable2.text];

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * from = [[f numberFromString:Number.text] retain];
[f release];

NSNumber *to = [[[DDUnitConverter currencyUnitConverter] convertNumber:from fromUnit:fromType toUnit:toType] retain];
float toto = [to floatValue];
Result.text = [NSString stringWithFormat:@"%.4f %@", toto, picklable2.text];

if ((toto == 0 || toto == [Number.text floatValue]) && picklable.text != picklable2.text ) {
    Result.text = @"No Internet Connection or Previous Data";
}

[from release];
[to release];

[Result flashScrollIndicators];

希望有人可以帮助我, 感谢

2 个答案:

答案 0 :(得分:0)

任何需要花费很长时间才能完成的事情都应该被派遣。像这样:

dispatch_async(dispatch_get_global_queue(), ^(void) {
    [self doReallyAmazinglyComplicatedProcessing];
});

答案 1 :(得分:0)

您的代码对我来说似乎没问题,但您使用的是DDUnitConverter。我从来没有使用它,但我想它需要互联网连接才能从互联网上加载数据。如果服务器需要很长时间才能回答,那么您的应用可能会挂断连接。

您可以尝试使用dispatch_async异步连接到服务器,这样您的应用就可以在后台下载数据。