2

GCDのパスにファイルを書き込もうとしていますが、機能しません。「NSUnderlyingError=0x6a3d450」というエラーが引き続き表示されます。操作を完了できませんでした。ディレクトリです」

dispatch_queue_t downloadQueue = dispatch_queue_create("flickr downloader", NO); 

dispatch_async(downloadQueue, ^{

    NSString* name = [photoDictionary valueForKey:@"title"];
    path = [path stringByAppendingPathComponent:id];

    if(![manager fileExistsAtPath:path]){
        if([manager createDirectoryAtPath: path withIntermediateDirectories:NO attributes:nil error:nil]){ //create intermediate directories
            data = [NSData dataWithContentsOfURL:[FlickrFetcher urlForPhoto:photoDictionary format:FlickrPhotoFormatOriginal]];  
            NSError *error = nil;
            BOOL success = [data writeToFile:path options:NSDataWritingAtomic error:&error];
            if (!success) {
                NSLog(@"Failed to write to file with error: %@", [error description]);
            }

            if([data writeToFile: path atomically:YES]){
                NSLog(@"data written to file");
            }   
        }
    }
    else{
        if([manager fileExistsAtPath:path]){
            data = [manager contentsAtPath:path];
        }
    }


    dispatch_async(dispatch_get_main_queue() , ^{
        sender.navigationItem.rightBarButtonItem = item;
        sender.photoData = data;
        sender.photoName = name; 
        //call the segue
        [sender performSegueWithIdentifier:segueTitle sender:sender];
    });       

});

dispatch_release(downloadQueue);

私が得ている問題は、[data writeToFile:path atomically:YES]が実行されないことです。ただし、データパスは実際に作成されており、「po data」を実行するとプログラムがハングするため、writeToFileが呼び出されたときにデータが完全にフェッチされなかったと思います。しかし、私は問題を正確に特定することができず、それを解決する方法がわかりません。どんなアドバイスも大歓迎です。ありがとう!

4

1 に答える 1

0

あなたのコードは、次にファイルを作成しようとしているパスにディレクトリを作成しています。それを取り出すか、代わりに親ディレクトリを作成してください

于 2012-06-13T20:32:55.747 に答える