2012-03-13 3 views
6

Я использую UISplitViewController на ARC, но это, кажется, сбой после нескольких вращательных событий:UISplitViewController EXC_BAD_ACCESS на вращение с помощью 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 

Кроме того, когда я запустить приложение, я получаю эту ошибку:

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

У меня пропущено? Я настроил его очень похоже на примерный проект, предоставленный Apple.

Также сбой иногда при переключении подробный вид:

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

Вот как я создаю UISplitViewController в applicationDidFinishLoading:

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

идеи?

+0

Опубликовать свое приложениеДополнительный код загрузки. – fbernardo

+0

Спасибо, только что добавил. –

+0

Итак, у вашего контроллера splitview нет диспетчеров просмотра при запуске приложения? К crashlog я уверен, что делегат uisplitviewcontrolller был выпущен. Попробуйте использовать зомби. – fbernardo

ответ

6

для ошибки

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

,

вам нужно установить делегат после установки контроллеров отображения для splitviewcontroller.

См. Use Your Loaf blog from April 6th, 2012 (Нет, это не мое).

+0

Спасибо, я наткнулся на ту же проблему, и проблема была в том, что я не назначал делегата моим новым контроллерам подробных представлений. Ваш ответ проложил путь ... –

Смежные вопросы