2011-12-20 5 views
0

У меня есть URL-адрес, который является ссылкой на аудиофайл и будет воспроизводиться с использованием AVFoundation.framework. Но по какой-то причине, когда приложение достигает установки NSData, он сбой. Пожалуйста помоги.Почему NSData разбивает мое приложение?

NSURL *url = [NSURL URLWithString:songPathForm]; 
NSData *soundData = [NSData dataWithContentsOfURL:url]; 

EDIT :::: Это то, что я сделал, чтобы сделать его остановить сбой, но данные не содержат ничего

NSString *url = [songPathForm stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 


        //NSURL *url = [NSURL URLWithString:songPathForm]; 
        NSURLRequest *songRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
                   cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; 

       NSURLConnection *songConnection = [[NSURLConnection alloc] initWithRequest:songRequest delegate:self]; 

       if(songConnection) 
       { 
        songData = [[NSMutableData data] retain]; 
       } 

Он выходит как <>

+1

сообщение, пожалуйста, об ошибке –

+0

У вас есть необработанная настройка обработчика исключений? Что такое сообщение об аварии? – Alan

+0

@Alan См. Мой обновленный вопрос – Matt

ответ

4

Существует абсолютно нет способ ответить на этот вопрос, поскольку он сформулирован, но вот некоторые подсказки:

  • , если есть сбой, есть обратная линия. Отправьте его.

  • если есть авария, есть какая-то ошибка. Отправьте его.

Учитывая, что код, существует два режима отказа, что я могу думать:

  • songPathForm является nil или поврежден и/или не URL.

  • данные на URL слишком велики для загрузки и заставляют приложение пытаться выделить ОГРОМНЫЙ объем памяти (бывают случаи, когда распределение может быть достаточно большим, чтобы разбивать приложение без механизма системы jetsam ногами).

Там нет сообщения аварии, он просто зависает и перестает отвечать на запросы. url не ноль это ...

Тогда почему вы сказали, что ваше приложение разбилось ?!

dataWithContentsOfURL: Синхронно загружает содержимое того, что находится по URL-адресу.

Таким образом, вы блокируете цикл основного события во время загрузки, поэтому ваше приложение не реагирует.

Вам необходимо асинхронно загружать данные; то есть не блокировать цикл основного события.

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

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


Код в вашем обновленном вопросе не имеет никакого смысла. Как вы ожидаете, что songData будет заполнено данными из соединения?

Когда вы делаете асинхронно, вы в основном говорите: «Идите делать это и дайте мне знать время от времени, как это происходит». В этом случае это будет уведомление о том, что доступно больше данных или что соединение выполняется для чтения (или с ошибкой).

Вы не можете запрашивать данные немедленно, так как данные не доступны сразу.

Вы захотите до read through this guide.

+0

Нет аварийного сообщения, оно просто зависает и перестает отвечать. url не нуль это: http://dc399.4shared.com/img/1026403228/91c2a0ba/dlink__2Fdownload_2FwT05DRlO/preview.mp3 – Matt

+0

Итак, я сделал то, что вы сказали, и загрузил его асинхронно, и он остановил его от замерзания, но если я просмотр данных просто появляется как <> – Matt

+0

Пожалуйста, см. мой обновленный код в моем вопросе – Matt