2012-03-13 12 views
6

estoy usando un UISplitViewController en ARC pero parece ser estrellarse después de algunos acontecimientos de rotación:UISplitViewController EXC_BAD_ACCESS en la rotación usando 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 

Además, cuando inicio la aplicación, me sale este error:

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

¿Qué me extrañó? Lo configuré muy similar al proyecto de ejemplo que proporcionó Apple.

También estrellarse a veces cuando se cambia la vista de detalle:

- (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 

Aquí es cómo crear el UISplitViewController en applicationDidFinishLoading:

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

ideas?

+0

Publique su código applicationDidFinishLoading. – fbernardo

+0

Gracias, acabo de agregarlo. –

+0

¿Entonces su splitviewcontroller no tiene viewcontrollers cuando se inicia la aplicación? En el crashlog apuesto a que el delegado de uisplitviewcontrolller fue lanzado. Por favor trata de usar zombies. – fbernardo

Respuesta

6

por el error

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

,

es necesario configurar el delegado después de establecer la controladores de vista de la splitviewcontroller.

Ver Use Your Loaf blog from April 6th, 2012 (No, no es mío).

+0

Gracias, me encontré con el mismo problema y el problema era que no estaba configurando el delegado en mis nuevos controladores de vista detallada. Tu respuesta abrió el camino ... –

Cuestiones relacionadas