Прогресс iOS Urban Airship и HUD - PullRequest
       28

Прогресс iOS Urban Airship и HUD

0 голосов
/ 30 января 2012

Я действительно застрял на этом.У нас есть IAP, где представление списка является нашим собственным, и мы указываем непосредственно на UADetailView для покупки.Из-за этого у нас нет индикатора выполнения, чтобы сообщить пользователю, как идет загрузка, и наши загрузки большие.Я думал, что могу использовать MBProgressHud, но я столкнулся с проблемой.Кажется, я не могу передать прогресс от UA до HUD.Все работает нормально с HUD, если я использую простой счетчик для его синхронизации.Во многом как их собственный пример.

Вот вызов HUD;

- (void)showWithLabelDeterminate {

HUD = [[MBProgressHUD alloc] initWithView:self.view.window];
[self.view.window addSubview:HUD];

// Set determinate mode
HUD.mode = MBProgressHUDModeDeterminate;

HUD.delegate =self;
HUD.labelText = NSLocalizedString(@"DownLoading","");

// myProgressTask uses the HUD instance to update progress
[HUD showWhileExecuting:@selector(refreshProgress) onTarget:self withObject:nil animated:YES];

}

и обновление, которое я пытаюсь использовать;

- (void)refreshProgress:(float)progress {
   while (progress < 1.0f)
    NSLog(@"++ progress for HUD: %f", progress);
  HUD.progress = progress;

}

Однако, когда я запускаю его, приложение аварийно завершает работу с этим журналом ...

2012-01-30 12: 23: 18.838 isengua-en [12730: 3827] - [UAProductDetailViewController refreshProgress]: нераспознанный селектор отправлен в экземпляр 0x3e2c10 2012-01-30 12: 23: 18.840 isengua-en [12730: 3827] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «- [UAProductDetailViewController refreshProgress]: нераспознанный селектор, отправленный экземпляру 0x3e2c10 '* Первый стек вызовов выброса: (0x30caa8bf 0x37e4f1e5 0x30cadacb 0x30cac945 0x30c07680 0x30c0922b 0x36 * 0 0 386 039 03837 0390 03838 0a 0 0 038 0 0 5 0 39 0 0 390 038 5 0 390 038 0 0 5 0 39 0 0 390 038 0 0 5 0 39 0 0 390 039 5Кто-нибудь, кто сталкивался с такой же проблемой и решил ее?

Обновление с изменениями ...

- (void)showWithLabelDeterminate {

HUD = [[MBProgressHUD alloc] initWithView:self.view.window];
[self.view.window addSubview:HUD];

// Set determinate mode
HUD.mode = MBProgressHUDModeDeterminate;

HUD.delegate =self;
HUD.labelText = NSLocalizedString(@"DownLoading","");

// myProgressTask uses the HUD instance to update progress
[HUD showWhileExecuting:@selector(productsDownloadProgress:) onTarget:self withObject:nil animated:YES];

}

- (void)productsDownloadProgress:(float)progress count:(int)count {
    HUD.progress = progress;
    UALOG(@"[StoreFrontDelegate] productsDownloadProgress: %f count: %d", progress, count);
    if (count == 0) {
        NSLog(@"Downloads complete !");

    }
}

и это на кнопке покупки

- (void)purchase:(id)sender {
self.navigationItem.rightBarButtonItem.enabled = NO;
[UAStoreFront purchase:product.productIdentifier];         
[self.navigationController popViewControllerAnimated:NO];
[[UAStoreFront shared] setDelegate:self];
[self showWithLabelDeterminate];

}

Журнал аварий:

2012-01-30 13: 12: 45.555 isengua-en [12886: 6e27] - [UAProductDetailViewController productsDownloadProgress:]: нераспознанный селектор отправлен в экземпляр 0x3f7f70.нераспознанный селектор отправлен в экземпляр 0x3f7f70 '* Первый стек вызовов броска: (0x30caa8bf 0x37e4f1e5 0x30cadacb 0x30cac945 0x30c07680 0x30c0922b 0xf5e21 0x37cbca91 0x37d505a1 0 * 0 0 0 0 0 0) 039

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Сбои здесь довольно очевидны и были должным образом объяснены Ником и Шоном.

Более важной проблемой является то, что вы применяете неправильный шаблон использования для MBProgressHUD для операции загрузки. То, что вы должны делать, это создавать hud и обновлять его прогресс в некотором обратном вызове делегата прогресса загрузки.

Пример, на который вам следует обратить внимание: https://github.com/jdg/MBProgressHUD/blob/master/Demo/Classes/HudDemoViewController.m#L156 вместе со следующими обратными вызовами делегатов https://github.com/jdg/MBProgressHUD/blob/master/Demo/Classes/HudDemoViewController.m#L226.

1 голос
/ 30 января 2012

Ваш метод прогресса обновления принимает параметр (float), поэтому у вашего селектора должно быть двоеточие в конце:

В цели C это:

@selector(refreshProgress:)

Не то же самое, что и это:

@selector(refreshProgress)

Это разные имена методов.

0 голосов
/ 10 февраля 2012

Если у вас есть метод

- (void)productsDownloadProgress:(float)progress count:(int)count

тогда его селектор

productsDownloadProgress:count:

не

productsDownloadProgress:

Итак, давая селектору «productsDownloadProgress:» вместо «productsDownloadProgress: count:», вы предоставляете селектор методу, который не существует. Когда HUD пытается вызвать этот селектор, среда выполнения Objective C ищет его в указанной вами цели (в данном случае «self»), не может найти его и выдает исключение NSInvalidArgument.

Возможно, у вас все еще будут проблемы, даже если вы исправите проблему с неверным селектором. Ваш productsDownloadProgress: count: метод принимает два аргумента, оба из которых являются базовыми типами, но метод [HUD showWhileExecuting: onTarget: withObject: animated:], по-видимому, нуждается в селекторе, который принимает только один аргумент, и этот аргумент должен быть Objective-C объект.

Для этого предназначена часть withObject: вы даете ей объект Objective-C, и он будет передан методу в качестве первого аргумента.

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

...