Получение ошибок в connectionDidFinishLoading, EXC_BAD_ACCESS

Я получаю ошибки во время выполнения метода делегата NSURLConnection connectionDidFinishLoading. Интересно, что он работает на симуляторе, но падает на физическом устройстве. Что еще более интересно, он падает только тогда, когда выполняется эта последовательность операций,

  • Запустить приложение
  • Показывает твит! (Потрясающий)
  • Нажмите кнопку «Домой»
  • Дважды щелкните кнопку «Домой»
  • Принудительно выйти из приложения
  • Снова открыть приложение
  • РАЗБИЛСЯ!!!!! ( :( )… Продолжайте зависать, пока не перезагрузите телефон!

ЖУРНАЛ ОШИБОК:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa0000008
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x321befbc 0x321bb000 + 16316
1   Tittle-Tattle                   0x0002cf10 -[MapViewController connectionDidFinishLoading:] (MapViewController.m:108)
2   Foundation                      0x3316bc32 0x330a5000 + 814130
3   Foundation                      0x330c36e2 0x330a5000 + 124642
4   Foundation                      0x330c36ac 0x330a5000 + 124588
5   Foundation                      0x330c35ce 0x330a5000 + 124366
6   CFNetwork                       0x35e7689e 0x35e67000 + 63646
7   CFNetwork                       0x35e6b53e 0x35e67000 + 17726
8   CFNetwork                       0x35e6b632 0x35e67000 + 17970
9   CFNetwork                       0x35e6b23c 0x35e67000 + 16956
10  CFNetwork                       0x35e6b172 0x35e67000 + 16754
11  CoreFoundation                  0x34176afc 0x340e9000 + 580348
12  CoreFoundation                  0x341762c8 0x340e9000 + 578248
13  CoreFoundation                  0x3417506e 0x340e9000 + 573550
14  CoreFoundation                  0x340f84d6 0x340e9000 + 62678
15  CoreFoundation                  0x340f839e 0x340e9000 + 62366
16  GraphicsServices                0x3254dfc6 0x3254a000 + 16326
17  UIKit                           0x3734e73c 0x3731d000 + 202556
18  Tittle-Tattle                   0x000200e0 main (main.m:16)
19  Tittle-Tattle                   0x00020084 start + 32

КОД :

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    [urlConnection cancel];
    [urlConnection release];
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

    //Since we got new fresh data we shall put it in LatestLocationData entity in CoreData
    [self insertLastKnownLocationDataIntoCoreDataWith:responseString];

    //Test purpose only, See what we have got in CoreData
    [self fetchLastKnownLocationDataFromCoreData];

    NSDictionary *results = [responseString JSONValue];
    placesNearBy = [results objectForKey:@"results"];

    [responseString release];

    [self dropNearByPlacesAnnotationsFrom:placesNearBy];

}

Вопрос . Что может быть причиной этого?

Похожий вопрос (не мной!) Задавался ранее, но никто не ответил на этот вопрос: Приложение не работает в iOS 5


Насколько я понимаю, EXE_BAD_ACCESS происходит только тогда, когда вы пытаетесь получить доступ к адресу памяти, который не был выделен или ранее выделен, но теперь он был освобожден.

РЕДАКТИРОВАТЬ ПОСЛЕ ОТВЕТА В КОММЕНТАРИИ:

Привет, Фирозе, вот как я запускаю NSURLConnection

urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

person TeaCupApp    schedule 13.11.2011    source источник
comment
@FirozeLafeer Привет, приятель! Я добавил метод инициализации. в вопросе :) Спасибо. Я выпускаю NSString там, потому что я выделяю, а init - это одна и та же функция. Я думаю, я должен выпустить его, да? иначе будет течь   -  person TeaCupApp    schedule 13.11.2011
comment
откуда берутся данные ответа? Сохраняется ли он везде, где создается?   -  person coneybeare    schedule 13.11.2011
comment
@Brogrammer игнорирует мой комментарий о responseString. Неважно, я не думал прямо там. Я пропустил эту часть.   -  person Firoze Lafeer    schedule 13.11.2011
comment
@coneybeare Да, когда я создаю responseData, у меня есть такой код: responseData = [[данные NSMutableData] сохранить]; Я надеюсь, что это правильный способ создания :(   -  person TeaCupApp    schedule 13.11.2011
comment
какая строка является строкой 108 в вашем коде (где происходит неправильный доступ)?   -  person XJones    schedule 13.11.2011
comment
[urlConnection cancel] — моя 108-я строка. Однако, я думаю, я понял, как это решить :) просто нужно добраться до дома и закодировать его! Спасибо, парни   -  person TeaCupApp    schedule 13.11.2011


Ответы (1)


Глядя на ваши комментарии, я бы посоветовал вам использовать объявления @property для всех ваших иваров. Они облегчат все ручное управление памятью, которое вам приходится делать, и, вероятно, в этом и заключается ваша проблема.

Быстрый пример

ВашКласс.h

@interface YourClass
@property (nonatomic, retain) NSURLConnection *urlConnection;
// More ivars

// Method declations
@end

ВашКласс.m

@interface YourClass

@synthesize urlConnection = _urlConnection;

// The method where you instantiate urlConnection
{
    NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request
                                                                     delegate:self];
    self.urlConnection = urlConnection;
    [urlConnection release]; urlConnection = nil;

    // Do whatever else you do here
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    [self.urlConnection cancel];
    self.urlConnection = nil;     <- This takes care of releasing the ivar and setting it to nil so there is no dangerous hanging pointer

    // ... the rest of your method
}

[urlConnection cancel];
[urlConnection release];
// You need to clean up after yourself with any ivars you make
- (void)dealloc
{
    [_urlConnection release]; 
    // Release any other ivars
    [super dealloc];
}
@end
person Paul.s    schedule 13.11.2011
comment
Еще одна вещь, которую я только что проверил, мой Dealloc и viewDidUnload никогда не отправляются сообщениями? Это необычно? Похоже, что вся моя куча методов освобождения в Dealloc бесполезна :( - person TeaCupApp; 13.11.2011