Как я могу возобновить работу ASINetworkQueue? - PullRequest
0 голосов
/ 06 ноября 2011

То, что я пытаюсь сделать, чтобы возобновить и поставить в очередь из той же точки, что и в момент, когда было потеряно сетевое соединение.Моя проблема не в доступности, а в возобновлении загрузки.Я провел все выходные, но не повезло.
Буду очень признателен за любую помощь.

В приведенном ниже коде есть метод commenceDownloadIfReachabilityIsOkay, который вызывается при возобновлении работы сети, но индикатор выполнения не перемещается, и я не вижу никаких действий, чтобы определить, есть ли у загрузки резюме.

Этот метод вызывается frin IBAction в контроллере

 - (void) downloadFile:(UIProgressView*)locprogressView;
    {

    // check for internet connection
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

    internetReachable = [[Reachability reachabilityForInternetConnection] retain];
    [internetReachable startNotifier];

    // check if a pathway to a random host exists
    hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
    [hostReachable startNotifier];

        if (![self asiqueue]) {
            [self setAsiqueue:[[[ASINetworkQueue alloc] init] autorelease]];
        }

     NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/Tests/the_great_american_novel.txt"];

        self.request = [ASIHTTPRequest requestWithURL:url];
        _progressView=locprogressView;

        self.progressView= locprogressView;

        [asiqueue cancelAllOperations];
        [asiqueue setDownloadProgressDelegate:self.progressView];
        [asiqueue setDelegate:self];
        [asiqueue setRequestDidFinishSelector:@selector(queueComplete:)];
        [asiqueue setShowAccurateProgress:YES];
        // [queue setr

        [request setDelegate:self];
        // [request setDidReceiveDataSelector:@selector(didReceiveData:)];
        [request setDidFinishSelector:@selector(requestDone:)];
        [request setDidFailSelector:@selector(requestWentWrong:)];
        [request setAllowResumeForFileDownloads:YES];
        [[self asiqueue] addOperation:request]; //queue is an NSOperationQueue
        [[self asiqueue]go ];

}

Этот метод вызывается из checkNetworkStatus, и я хочу возобновить его загрузку

 - (void)commenceDownloadIfReachabilityIsOkay
    {
        if (self.asiqueue && self.hostActive && self.internetActive)
        {

            [[self asiqueue]go ];

        }

    }

Этот метод просто продолжает опрос для проверки состояния сети - взято из Как проверить активное подключение к Интернету на iOS или OSX?

- (void) checkNetworkStatus:(NSNotification *)notice
{
    // called after network status changes

    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)

    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            self.internetActive = NO;

            break;

        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");
            self.internetActive = YES;

            break;

        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");
            self.internetActive = YES;

            break;

        }
    }

    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
    switch (hostStatus)

    {
        case NotReachable:
        {
            NSLog(@"A gateway to the host server is down.");
            self.hostActive = NO;

            break;

        }
        case ReachableViaWiFi:
        {
            NSLog(@"A gateway to the host server is working via WIFI.");
            self.hostActive = YES;

            break;

        }
        case ReachableViaWWAN:
        {
            NSLog(@"A gateway to the host server is working via WWAN.");
            self.hostActive = YES;

            break;

        }
    }

    [self commenceDownloadIfReachabilityIsOkay];
}

1 Ответ

2 голосов
/ 06 ноября 2011

Если я правильно понимаю ваш код, то я надеюсь, что вызов:

[[self asiqueue]go ];

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

  1. После сбоя запроса ASIHTTPRequest он удаляется из очереди.
  2. Вызов go в очереди, которая go уже былаВызванный на ничего не делает

Решение состоит в том, чтобы запросить запрос на его перезапуск.

Также, http://allseeing -i.com / ASIHTTPRequest / Как использовать# resuming_interrupted_downloads говорит:

Кроме того, вы должны самостоятельно установить временный путь загрузки (setTemporaryFileDownloadPath) с путем к частичным данным.

, чтоваш код, кажется, не делает.(Вам также нужно setDownloadDestinationPath)

...