2012-03-13 11 views
6

Używam UISplitViewController na ARC ale wydaje się być upaść po kilku zdarzeń obrotów:UISplitViewController EXC_BAD_ACCESS na obrót za pomocą ARC

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

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib     0x32461f78 objc_msgSend + 16 
1 UIKit       0x3588b280 -[UISplitViewController _calculateDelegateHiddenMasterOrientations] + 52 
2 UIKit       0x3588cca8 -[UISplitViewController setViewControllers:] + 1344 
3 PUC        0x000d0a42 0x1000 + 850498 
4 UIKit       0x35644ade -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 938 
5 UIKit       0x356be7a4 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 152 

Ponadto, kiedy uruchomić aplikację, pojawia się ten błąd:

Splitview controller <PUCSplitViewController: 0x36c290> is expected to have a master view controller before its used! 

Co przeoczyłem? Ustawiłem go bardzo podobnie do przykładowego projektu dostarczonego przez firmę Apple.

także upaść czasami podczas przełączania widoku szczegółach:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    // Clicked Asset 
    Asset *asset = [items objectAtIndex:indexPath.row]; 

    UIViewController *detailViewController = nil; 

    // See what asset we are on 
    if ([asset.title isEqualToString:@"News"]) { 
     News2 *news = [[News2 alloc] initWithStyle:UITableViewStyleGrouped]; 
     UINavigationController *newsNav = [[UINavigationController alloc] initWithRootViewController:news]; 
     detailViewController = newsNav; 
    } else if ([asset.title isEqualToString:@"Photos"]) { 
     PhotosiPad *photos = [[PhotosiPad alloc] init]; 
     UINavigationController *photosNav = [[UINavigationController alloc] initWithRootViewController:photos]; 
     detailViewController = photosNav; 
    } 

    // Update the split view 
    [PUCAppDelegate instance].mainSplitViewController.viewControllers = [NSArray arrayWithObjects:self.navigationController, detailViewController, nil]; 

    // Dismiss the popover if it's present. 
    if (popoverController != nil) { 
     [popoverController dismissPopoverAnimated:YES]; 
    } 

}//end 

Oto jak stworzyć UISplitViewController w applicationDidFinishLoading:

PUCSplitViewController *splitPUC = [[PUCSplitViewController alloc] init]; 
self.mainSplitViewController = splitPUC; 
[self.window addSubview:self.mainSplitViewController.view]; 
[self.window makeKeyAndVisible]; 

pomysły?

+0

Zamieść swój kod applicationDidFinishLoading. – fbernardo

+0

Dzięki, po prostu go dodałem. –

+0

Więc twój splitviewcontroller nie ma viewcontrollers po uruchomieniu aplikacji? Przy dzienniku awarii założę się, że delegat uisplitviewcontrolller został zwolniony. Spróbuj użyć zombie. – fbernardo

Odpowiedz

6

do błędu

is expected to have a master view controller before its used! 

,

trzeba ustawić delegata Po ustawieniu kontrolerów widoku dla splitviewcontroller.

Zobacz Use Your Loaf blog from April 6th, 2012 (Nie, to nie jest moja).

+0

Dziękuję, natknąłem się na ten sam problem, a problem był nie zachodziło delegata do moich nowych kontrolerów widok szczegółów. Twoja odpowiedź na czele ... –

Powiązane problemy