S3RequestDelegate метады не працуюць для S3GetObjectRequest ў AWS IOS SDK 1.0.1

Я напісаў хуткі метад Objective-C, які выкарыстоўвае Амазонкі AWS iOS SDK сінхронна загрузіць файл з майго Amazon S3 вядра ў маім IPad дадатку. Гэта дадатак прадпрыемствы, і я выкарыстоўваю дасяжнасці для выяўлення WiFi, перш чым дазволіць сінхранізацыю з S3. Ён працуе выдатна для кароткіх ўкладаў (тыя ў кілабайтах), але з файламі, якія знаходзяцца вакол 20-30 мегов, ён будзе працягваць загружаць ў струмень, і файл будзе працягваць расці. Я не адпусціць яе, каб убачыць, калі гэта будзе ў канчатковым выніку спыніць/аварыі, але я назіраў файл, які быў 30 мегабайта прайсці 90 мегабайта ў маёй iOS Simulator. Я прачытаў на некалькі халодных патокаў, дзе некаторыя з іх перажылі тое ж самае, і я сапраўды патрэбен адказ.

Вось мой метад ...

    - (void)retrieveRemoteFile:(NSString *)fileName {
        NSString *destinationFileName = [NSString stringWithFormat:@"%@%@",[self getBucketDirectory],fileName];
        AmazonS3Client *s3 = [[[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY] autorelease];
        NSOutputStream *stream = [[NSOutputStream alloc] initToFileAtPath:destinationFileName append:NO];
        [stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [stream open];
        S3GetObjectRequest *request = [[S3GetObjectRequest alloc] initWithKey:fileName withBucket:BUCKET];
        request.outputStream = stream;
        [s3 getObject:request];
        [stream close];
        [stream release];
        [request release]; 
    }

Пераацэнка сітуацыі, я б вельмі хацеў, каб мой метад, выкарыстоўваючы запыт асінхроннага і выкарыстоўваць аб'ект S3RequestDelegate, каб дапамагчы мне абнавіць bytesIn, як гэта запампоўка. У сваім архіве ёсць узор ў S3AsyncViewController, які павінен паказаць, як рабіць тое, што я хачу. Я дадаў S3RequestDelegate.h/.m ў мой праект, і рэалізаваў S3RequestDelegate ў маіх .h, як гэта ...

    #import "S3RequestDelegate.h"

    ... {
        S3RequestDelegate *s3Delegate;
    }

Я змяніў мой метад retrieveRemoteFile глядзець трохі як гэта (гэта змяніла ўвесь дзень, і я не атрымаў дзе-небудзь)

    - (void)retrieveRemoteFile:(NSString *)fileName {
        NSString *destinationFileName = [NSString stringWithFormat:@"%@%@",[self getBucketDirectory],fileName];
        AmazonS3Client *s3 = [[[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY] autorelease];
        NSOutputStream *stream = [[NSOutputStream alloc] initToFileAtPath:destinationFileName append:NO];
        //[stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        //[stream open];
        S3GetObjectRequest *request = [[S3GetObjectRequest alloc] initWithKey:fileName withBucket:BUCKET];
        request.outputStream = stream;
        s3Delegate = [[S3RequestDelegate alloc] init];
        [request setDelegate:s3Delegate];
        [s3 getObject:request];
        //[stream close];
        //[stream release];
        //[request release]; 
    }

Як вы можаце бачыць, я ўсталяваць дэлегат S3GetObjectRequest з setDelegate на мой S3RequestDelegate паказальнік s3Delegate. Я дадаў кропкі супыну ва ўсіх метадах дэлегаты аб'екта S3RequestDelegate, але ні адзін з іх не выконваецца. У пошуках прынятага файл на маім трэнажоры, нічога не нават атрымліваць загружана ў цяперашні час.

Ўзор робіць яго падобным на ўсё, што вам трэба зрабіць, гэта ўсталяваць дэлегат, каб зрабіць яго асінхронным. Гэта таксама робіць яго падобным вам не трэба кіраваць аб'ектам патоку, і ці ёсць у вас ці не, нішто не загружаецца. Я ўсталёўваю дэлегат і ён ніколі не працуе якой-небудзь з метадаў дэлегата; didReceiveResponse, didCompleteWithResponse, didReceiveData, didSendData, totalBytesExpectedToWrite, didFailWithError або didFailWithServiceException.

1

1 адказы

Я наладжваў мой запыт для запуску ў OperationsQueue. Выдаленыя гэты код і пачаць перадачу Asynchronous на галоўным патоку, а функцыі дэлегаты апрацоўваць перадачы ага файла ў масіве. Я ўключыў радок стану і кнопка адмены, і яна працавала пышна.

3
дададзена
Мне патрэбна дапамога па гэтым пытанні. як я маючы такія ж issue.I ёсць паведамленні (якія ўключаюць у сябе файлы для загрузкі на s3) і я пачатак аперацыі ў чарзе NSOperation ў фонавым рэжыме, як мне трэба, каб загрузіць усе паведамленні і файлы ў фонавым рэжыме, пакуль карыстальнік можа выкарыстоўваць прыкладанне, якое я магу achive гэта на галоўным патоку? адказ будзе вельмі appriciated.
дададзена аўтар Moaz Saeed, крыніца