отчет об ошибках отладки - PullRequest
0 голосов
/ 19 июня 2011

Внезапно мое приложение начало падать. Я получаю следующее

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000010f8b9f0
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: release
iPhone Simulator 235, iPhone OS 4.2 (iPhone/8C134)

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x01223a63 objc_msgSend + 23
1   CoreFoundation                  0x00fd8a6c CFRelease + 92
2   CoreFoundation                  0x010ba8ca -[__NSArrayI dealloc] + 170
3   CoreFoundation                  0x00fd8a6c CFRelease + 92
4   CoreFoundation                  0x00ffdb8d _CFAutoreleasePoolPop + 237
5   Foundation                      0x00056738 -[NSAutoreleasePool drain] + 167
6   CFNetwork                       0x0168c606 URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 220
7   CFNetwork                       0x01757821 URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 293
8   CFNetwork                       0x01757b0f URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 1043
9   CFNetwork                       0x01682e3c URLConnectionClient::processEvents() + 100
10  CFNetwork                       0x01682cb7 MultiplexerSource::perform() + 251
11  CoreFoundation                  0x010a301f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
12  CoreFoundation                  0x0100128b __CFRunLoopDoSources0 + 571
13  CoreFoundation                  0x01000786 __CFRunLoopRun + 470
14  CoreFoundation                  0x01000240 CFRunLoopRunSpecific + 208
15  CoreFoundation                  0x01000161 CFRunLoopRunInMode + 97
16  GraphicsServices                0x0198d268 GSEventRunModal + 217
17  GraphicsServices                0x0198d32d GSEventRun + 115
18  UIKit                           0x0030c42e UIApplicationMain + 1160
19  i-Referral                      0x00002582 main + 84 (main.m:53)
20  i-Referral                      0x00002525 start + 53

Если я запускаю «Allocations» с включенным Zombie, все работает нормально, однако флаг не поднимается.

Это происходит сбой после NSURLRequest, сидящего в делегате приложения. Есть идеи?

В connectionDidFinishLoading: метод, который я вызываю только для анализа. Один массив создается и освобождается.

Когда приложение падает, оно не заходит так далеко.

Когда приложение впервые запускает здесь последовательность событий: установить nsurl, Конн получил ответ, Конн получил данные, завершена загрузка соединения, разбор начала ...

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

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


NSXMLParser *responseParser = [[NSXMLParser alloc] initWithData:provListData];
responseParser.delegate = self;
[responseParser parse];
[responseParser release];



}

Я думаю, что сбой вызван нажатием на новый контроллер.

Вот что у меня есть. вид входа в систему -> вид регистрации

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

У меня это работало, но что-то где-то изменилось.

Я делаю то же самое при успешном входе в систему, и это прекрасно работает.

INIT

UINavigationController *localNavigationController;
tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray   alloc] initWithCapacity:3];


ProviderListViewController *firstViewController;
    firstViewController = [[ProviderListViewController alloc] initWithTabBar];
    localNavigationController = [[UINavigationController alloc] 
                                 initWithRootViewController:firstViewController];

    [localControllersArray addObject:localNavigationController];
    [localNavigationController release];
    [firstViewController release];



    Login *signupViewController;
    signupViewController = [[Login alloc] initWithTabBar];
    localNavigationController = [[UINavigationController alloc] 
                                 initWithRootViewController:signupViewController];

    [localControllersArray addObject:localNavigationController];
    [localNavigationController release];
    [signupViewController release]; 


    SecondViewController *secondViewController;
    secondViewController = [[SecondViewController alloc] initWithTabBar];
    localNavigationController = [[UINavigationController alloc] 
                                 initWithRootViewController:secondViewController];

    [localControllersArray addObject:localNavigationController];
    [localNavigationController release];
    [secondViewController release];


 tabBarController.viewControllers = localControllersArray;

[self.window addSubview:tabBarController.view];

[self.window makeKeyAndVisible];

[localControllersArray release];

push новый контроллер

AppDelegate  *appd = [[AppDelegate alloc]init];
    [appd gotConnection];
    [appd release];



    UINavigationController *navcont = self.navigationController;
    [self retain];
    Dashboard *third = [[Dashboard alloc] initWithNibName:@"Dashboard" bundle:nil];
    NSArray *newarray = [NSArray arrayWithObjects:third,nil,nil];
    [navcont setViewControllers:newarray animated:YES];
    [third release];    

Ответы [ 3 ]

1 голос
/ 19 июня 2011

Похоже, что вы отправляете сообщение release в освобожденный экземпляр в методе connectionDidFinishLoading:.Проверьте балансировку вызовов управления памятью.

0 голосов
/ 09 июля 2011

Я посвятил выходные, чтобы выследить утечки и убедиться, что все сохранения / init / release учтены. Авария наконец исчезла, но фактически не изменила класс, указанный в отчете о сбое.

0 голосов
/ 19 июня 2011

Попробуйте удалить [third release]; вашего последнего кода, куда вы добавляете новый контроллер


Затем оставьте это там и попробуйте удалить [localControllersArray release];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...