2014-11-06 12 views
6

Sto provando a sviluppare un'applicazione iOS di dettaglio master (solo iPad) dal modello xCode 6. Funziona bene con iOS 8, ma in esecuzione su iOS 7.0 o 7.1 produce un incidente in fase di esecuzione in cui ho commentato:Il modello di applicazione iOS principale-dettaglio da xCode 6 non funziona su iOS 7

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 

    // this line throws a "[MasterViewController topViewController]: unrecognized selector sent to instance 0x796dde90" 
    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; 
    splitViewController.delegate = self; 
    return YES; 
} 

per riprodurre il bug:

  • Aprire xCode 6
  • File> Nuovo> progetto
  • Scegliere "master-Details Application" sotto "applicazione iOS"
  • Cambio di destinazione del progetto per 7,0
  • Run su emulatore o dispositivo

ho indagato e sembra che tipi di oggetto differisce su iOS 7 e iOS 8:

  • Su iOS 8, self.window.rootViewController è un UISplitViewController
  • In iOS7, auto .window.rootViewController è il primo UINavigationController (a sinistra)

Perché questo comportamento?

+0

Stai provando su iPhone o iPad? –

risposta

3

provate questa sostituzione:

if ([splitViewController respondsToSelector:@selector(displayModeButtonItem)]){ 
    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; 
} 
+1

Funziona ma ora ho solo la vista "master". Non più vista "dettagli". –

+0

ah ok, quindi abbiamo bisogno di un altro {} in seguito per gestire pre iOs8. Sfortunatamente, non ho un progetto di split view. Ho bisogno di guardare un modello splitView da xCode5 – Jef

+0

Attualmente sto scaricando xCode 5 per testarlo anch'io. –

3

Mettere questo sotto prepareForSegue: per garantire la retrocompatibilità.

DetailViewController *controller; 
    if ([[segue destinationViewController] isKindOfClass:[UINavigationController class]]) { 
     controller = (DetailViewController *)[[segue destinationViewController] topViewController]; 
    } 
    else { 
     controller = (DetailViewController *)[segue destinationViewController]; 
    } 
[controller setDetailItem:object]; 
1

displayModeButtonItem funziona solo su iOS 8 o versioni successive.

Problemi correlati