0

サーバーから音楽ファイル m4a をダウンロードする iPad アプリがあります。AFHTTPRequestOperation を使用して、outputStreamToFileAtPath を使用してドキュメント ディレクトリに直接ダウンロードしています。時間がかかることは気にしていません。ダウンロードは数時間後に行われる可能性が高いため、ファイルをダウンロードする必要があります。iPad で実行しようとすると、次のエラー メッセージが表示されます。最初の 5 つと最後の 5 つを取得しますが、残りはタイムアウトになります。私のコードに問題はありますか?タイムアウト値を増やす方法はありますか? または、AFNetworking 以外に使用できるものはありますか? どんな助け/アイデアも大歓迎です。

ERROR ERROR ERROR:Error Domain=NSURLErrorDomain Code=-1001 「リクエストがタイムアウトしました。」UserInfo=0xc6e01c0 {NSErrorFailingURLStringKey=http://xxxx/Music/ece0b7c5ab71a24c6f6694986fc7a4a7.m4a, NSErrorFailingURLKey=http://xxx/Music/ece0b7c5ab71a24c6f6694986fc7a4a7.m4a, NSLocalizedDescription=The request timed out., NSUnderlyingError=0xc69c950 "The request timed out." } - パスに保存できませんでした:/var/mobile/Applications/207B2EFB-78E0-4BB2-8019-026B598ECE44/Documents/music/ece0b7c5ab71a24c6f6694986fc7a4a7.m4a

そしてコード:

- (void)saveFilesToDocDir
{
    NSString *fileLink = @"http://xxx/Music/";
    NSArray *dirPathSearch = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDirPath = [dirPathSearch objectAtIndex:0];
    NSString *dirPath = [docDirPath stringByAppendingPathComponent:@"music/"];

    // if the sub directory does not exist, create it
    NSError *error = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath:dirPath])
    {
        NSLog(@"%@: does not exists...will attempt to create", dirPath);

        if (![fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error])
        NSLog(@"errormsg:%@", [error description]);
    }

    self.processCount = 0;
    for (int i = 0; i < [self.musicFiles count]; i++)
    {
        NSString *filename = [self.musicFiles objectAtIndex:i];
        NSString *urlPath = [NSString stringWithFormat:@"%@%@", fileLink, filename];
        NSString *filePath = [dirPath stringByAppendingPathComponent:filename];

        // download the song file and save them directly to docdir
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlPath]];

        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

        operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) 
        {
            self.processCount++;
            NSLog(@"Song:%d Success!", processCount);

            // all the files have been saved, now update the playlist
            if (self.processCount == [self.musicFiles count])
            {
                [self updatePlaylist];
            }

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        {
            self.processCount++;
            NSLog(@"ERROR ERROR ERROR:%@ - could not save to path:%@", error, filePath);
        } ];

        [operation start];
    }
4

1 に答える 1

0
[request setTimeoutInterval:1000];

interval に適切な値を設定し (これを使用する場合があります)、リクエストの作成後に追加します。

于 2014-01-27T07:05:54.697 に答える