2015-09-17 2 views
0

Я занимаюсь частью магазина для приложения iOS, у которого есть две страницы (первая страница для показа списка голосовой почты в магазине и вторая страница для показа мелодии голоса в голосовой папке) ,Как загрузить данные из url содержит json fileurl цель C

при нажатии на любую ячейку в голосовой папкеList перейти на следующую страницу и на следующей странице существует одна кнопка с именем: ЗАГРУЗИТЬ, что я хочу, когда я нажимаю на эту кнопку, голос загружается и сохраняется в папке с документами. это код, который я сделал внутри кнопки нажимается обработка:

- (void)downloadingVoice { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSLog(@"Starting Download ..."); 
     NSString *downloadUrl = @"10.3.1.228:9000/files"; 
     NSURL *url = [NSURL URLWithString:downloadUrl]; 
     NSData *urlData = [NSData dataWithContentsOfURL:url]; 

     if (urlData) { 

      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *voiceDirectory = [paths objectAtIndex:0]; 
      NSString *voicePaths = [NSString stringWithFormat:@"%@%@", voiceDirectory,@"voice.mp3"]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       [urlData writeToFile:voicePaths atomically:YES]; 
       NSLog(@"Saved voice files"); 
      }); 
     } 
    }); 
} 

- (void)btnDownloadClicked:(id)sender { 
    NSLog(@"Downloading Voice . . ."); 

    [self downloadingVoice]; 
} 

и вот как я поставил кнопку ниже списка голосов:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { 
    return 60.0f; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    // if(tableView == self.shopTableView) { 
    UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
    UIButton *download = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [download setTitle:@"Download" forState:UIControlStateNormal]; 
    [download addTarget:self action:@selector(btnDownloadClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [download setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 
    download.frame = CGRectMake(0, 0, 130, 30); 
    [footerView addSubview:download]; 

    return footerView; 
} 

, когда я нажимаю на кнопку, и поставить некоторые точки останова , это конец после if (urlData) когда я проверить urlData и downloadUrl, он говорит:

2015-09-17 10:53:01.926 Selfie[87197:674517] Starting Download ... 

(lldb) po urlData 
error: Couldn't materialize: couldn't get the value of variable urlData: no location, value may have been optimized out 
Errored out in Execute, couldn't PrepareToExecuteJITExpression 
(lldb) po downloadUrl 
error: Couldn't materialize: couldn't get the value of variable downloadUrl: variable not available 
Errored out in Execute, couldn't PrepareToExecuteJITExpression 

кто-то пожалуйста, помогите мне решить эту проблему .. Я буду очень благодарю вас за час elp ..

ответ

0

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

Во-вторых, можете ли вы убедиться, что URL-адрес, на который вы указываете, открыт в сети, к которой вы пытаетесь получить доступ к файлам. Если это локальный сервер, лучше поместите localhost, а не IP-адрес.

- (void)fetchFilesAsynchronously { 
    NSURL *myUrl = [NSURL URLWithString:@"http://10.3.1.228:9000/files"]; 
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:myUrl cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0]; 

    // Add headers as per your need 
    [urlRequest setValue:@"value" forHTTPHeaderField:@"key"]; 

    // Add body as per your need 
    NSDictionary *body = @{@"key" : @"value"}; 
    NSData *requestBodyData = [NSJSONSerialization dataWithJSONObject:body options:NSJSONWritingPrettyPrinted error:nil]; 
    [urlRequest setHTTPBody:requestBodyData]; 

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *iResponse, NSData *iData, NSError *iConnectionError) { 
     // Handle response here 
    }]; 
} 

В-третьих, для выпуска отладчика, пожалуйста, обратите внимание на this thread.

Смежные вопросы