Работает на iOS Simulator, но не на устройстве iOS? - PullRequest
0 голосов
/ 27 марта 2012

РЕДАКТИРОВАТЬ: Это работает, но это занимает удивительно много времени, чтобы завершить.Это нормально, или есть способ оптимизировать его?

Спасибо

Я использую 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 голосов
/ 27 марта 2012

Ваш код мне кажется нормальным, но вы используете DDUnitConverter.Я никогда не использовал его, но я полагаю, что для загрузки данных из Интернета требуется подключение к Интернету.Если на ответ сервера требуется много времени, ваше приложение может зависнуть при подключении.

Вы можете попытаться подключиться к серверу асинхронно, используя dispatch_async, это позволит вашему приложению загружать данные в фоновом режиме.

0 голосов
/ 27 марта 2012

Все, что занимает удивительно много времени, должно быть отправлено. Как это:

dispatch_async(dispatch_get_global_queue(), ^(void) {
    [self doReallyAmazinglyComplicatedProcessing];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...