2014-10-07 13 views
5

Come altri che vengono a iOS 8, sto ottenendo l'avvertimento:Presentando vista controllori sulla casa ... - a volte

Presenting view controllers on detached view controllers is discouraged <EditItineraryViewController: 0x7ca56e00>. 

Questo è causato dal codice seguente:

- (void)editActivityDetailsForIndexPath:(NSIndexPath *)indexPath { 
    NSPredicate *predicateForDisplay = [[NSPredicate alloc] init]; 
    switch (indexPath.section) { 
     case kIncompleteActivitiesSection: 
      predicateForDisplay = _predIncomplete; 
      break; 
     case kCompleteActivitiesSection: 
      predicateForDisplay = _predComplete; 
      break; 
     default: 
      break; 
    } 
    NSString *theActivityName = [[NSString alloc] init]; 
    theActivityName = [[[_activitiesArray filteredArrayUsingPredicate:predicateForDisplay] objectAtIndex:indexPath.row] activityName]; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    ActivityDetailViewController *activityDetailVC = [storyboard instantiateViewControllerWithIdentifier:@"ActivityDetailView"]; 
    activityDetailVC.modalPresentationStyle = UIModalPresentationFormSheet; 
    activityDetailVC.delegate = self; 
    // send the activity to the view 
    activityDetailVC.theActivity = [[_activitiesArray filteredArrayUsingPredicate:predicateForDisplay] objectAtIndex:indexPath.row]; 
    // configure the look of the view 
    _activityDetailsPopover = [[UIPopoverController alloc] initWithContentViewController:activityDetailVC]; 
    _activityDetailsPopover.delegate = self; 
    ItineraryCell *cell = (ItineraryCell *)[self.itineraryTableView cellForRowAtIndexPath:indexPath]; 
    activityDetailVC.contentView.backgroundColor = [UIColor whiteColor]; 
    activityDetailVC.navigationBar.barTintColor = _colorSchemeLightColor; 
    activityDetailVC.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:_colorSchemeColor}; 
    activityDetailVC.saveButton.tintColor = _colorSchemeColor; 
    activityDetailVC.cancelButton.tintColor = _colorSchemeColor; 
    activityDetailVC.labelB.textColor = _colorSchemeColor; 
    activityDetailVC.labelM.textColor = _colorSchemeColor; 
    activityDetailVC.activityTitle.textColor = _colorSchemeColor; 
    activityDetailVC.activityTitle.font = [UIFont boldSystemFontOfSize:17.0]; 
    // present the view 
    [_activityDetailsPopover presentPopoverFromRect:cell.cellDetailsButton.frame inView:cell.cellDetailsButton.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 

Questo è un'app per iPad e in questo caso il popover viene presentato in modo tale da avere il puntatore che punta su un'icona "i" che si trova su una cella tableview in una tableview.

Questo funziona in altri tre posti nella mia app senza causare l'avviso. Ma per qualche ragione, con questa implementazione, sta causando l'avvertimento. La cosa strana è che questo è stato il primo posto nella mia app che ho usato per presentare il popover da una cella tableview e le altre istanze sono solo copie di questo codice!

Qualche idea su cosa posso guardare per capire dove si trova la gerarchia? È legato al modo in cui la cella tableview viene generata e quindi questo popover viene presentato in cima ad esso o deve essere strettamente collegato al popover stesso? O potrebbe avere a che fare con la tableview. Non so nemmeno da dove cominciare a guardare.

Grazie mille!

+1

Qualcuno può aiutarmi con questo? – Kent

+0

Hai trovato la risposta? Ho lo stesso problema – silvaric

risposta

2

Ho risolto questo problema presentando il popover dal controller di visualizzazione che presenta tableView (nel mio caso una vista di insieme). Il problema sorge quando ti presenti da una cella. Suppongo che ogni cella sia considerata un "controllore della vista staccato", quindi presentarsi da loro ti darà questo errore e non riceverà gli eventi di rotazione, che a loro volta non useranno il callback popoverPresentationController:willRepositionPopoverToRect:inView:.

Problemi correlati