2014-11-06 16 views
6

पर नहीं चलता है मैं xCode 6 टेम्पलेट से एक मास्टर-विवरण आईओएस एप्लिकेशन (केवल आईपैड) विकसित करने की कोशिश कर रहा हूं। यह iOS 8 के साथ ठीक चलता है, लेकिन iOS 7.0 या 7.1 पर इसे चलाने रन-टाइम में एक दुर्घटना मैं कहाँ टिप्पणी की है पैदा करता है:आईओएस 6 से आईओएस मास्टर-विस्तार आवेदन टेम्पलेट आईओएस 7

  • ओपन Xcode 6
  • :

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

    बग पुन: पेश करने के लिए

  • फ़ाइल> नया> परियोजना
  • चुनें नीचे "iOS आवेदन" "मास्टर-विवरण आवेदन" 7.0
  • रन करने के लिए परियोजना का लक्ष्य
  • बदलें एमुलेटर या डिवाइस पर

मैं जांच की और ऐसा लगता है कि वस्तु प्रकार iOS 7 और iOS 8 पर भिन्न होता है:

  • iOS8 पर, self.window.rootViewController एक UISplitViewController
  • iOS7, स्वयं पर है .window.rootViewController पहला UINavigationController (बाएं)

यह व्यवहार क्यों है?

+0

क्या आप आईफोन या आईपैड पर परीक्षण कर रहे हैं? –

उत्तर

3

इस प्रतिस्थापन की कोशिश:

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

यह काम करता है लेकिन अब मेरे पास केवल "मास्टर" दृश्य है। कोई और "विस्तार" दृश्य नहीं। –

+0

आह ठीक है, इसलिए हमें पूर्व iOs8 से निपटने के लिए {} बाद में किसी और की आवश्यकता है। दुर्भाग्यवश, मेरे पास एक स्प्लिट व्यू प्रोजेक्ट नहीं है, क्षमा करें। आईडी को xCode5 – Jef

+0

से एक स्प्लिट व्यू टेम्पलेट को देखने की आवश्यकता है, मैं वर्तमान में इसका परीक्षण करने के लिए xCode 5 डाउनलोड कर रहा हूं। –

1

इंजीनियर अपने टेम्पलेट का पश्चगामी संगतता की जाँच करने को भूल गए हैं लगता है। XCode 5.1.1 मास्टर-विवरण टेम्पलेट से स्टोरीबोर्ड का उपयोग करने से समस्या हल हो गई। आप में से उन लोगों के लिए Google से आ रहे हैं, आप यहां xCode 5.1.1 डाउनलोड कर सकते हैं: https://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg

3

पीछे की संगतता सुनिश्चित करने के लिए इसे prepareForSegue: के तहत रखें।

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

displayModeButtonItem केवल आईओएस 8 या बाद में काम करता है।