2012-10-08 8 views
5

में पहला पृष्ठ कैसे सेट करें जब उपयोगकर्ता UIPageViewController के पहले पृष्ठ पर है और वापस जाने का प्रयास करता है, तो मैं बस शून्य वापस आ जाता हूं। आईओएस 5 में यह ठीक काम करता है। यह आईओएस 6 में एक दुर्घटना का कारण बन रहा है।UIPageViewController

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (0) doesn't match the number required (1) for the requested transition' 

मेरा कोड यहां है। nil के बजाय contentViewController लौटने पर, यह ठीक काम करता है। nil के बजाय मुझे क्या रखा जाना चाहिए?

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
    viewControllerBeforeViewController:(UIViewController *)viewController { 

    contentViewController = [[ContentViewController_iPhone alloc] init]; 

    int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]]; 

    if ((currentIndex == 0) || (currentIndex == NSNotFound)) { 

     //if on the first page, can't go back 
     return nil; 

    } 

    contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1]; 

    return contentViewController; 

} 
+0

क्या आप बस 'शून्य' के बजाय 'स्वयं' वापस कर सकते हैं? यह मेरे हिस्से पर अनुमान है। –

+0

@ जोशुआस्मिथ मैंने कोशिश की, लेकिन मुझे अभी भी एक ही समस्या है। हालांकि धन्यवाद। –

+0

रिटर्निंग 'शून्य' बिल्कुल ठीक है कि ऐप्पल का "पृष्ठ-आधारित एप्लिकेशन" प्रोजेक्ट टेम्पलेट पहले और अंतिम पृष्ठों को कैसे संभालता है। मुझे लगता है कि आपको कुछ और समस्या है। अपवाद ब्रेकपॉइंट सेट करें और अपवाद के पूर्ण स्टैक ट्रैक को पोस्ट करें। –

उत्तर

10

मुझे एक ही समस्या थी और पता चला कि यह केवल तभी होता है जब मैं पेजव के प्रतिनिधियों को बदलूं iewcontrollers gestureRecognizers मेरे स्वयं के नियंत्रक के लिए (यह अक्सर किया जाता है यदि आप पृष्ठ पर कुछ क्षेत्रों को टैप करते समय पेजिंग को रद्द करना चाहते हैं, उदा। बटन)।

मेरे लिए यह आईओएस 6 के लिए पुन: असाइनमेंट नहीं करने के लिए काम करता है। यह ठीक है, क्योंकि आईओएस हैंडल थोड़ा अलग स्पर्श करता है। पृष्ठ पर बटन या आपके स्वयं के इशारा पहचानकर्ता आईओएस 6 के तहत ठीक काम करेंगे क्योंकि उनके पास प्राथमिकता है और वे स्वचालित रूप से पेजिंग रद्द कर देंगे।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

मैं इसे बाद में कोशिश करूंगा। आपने कहा कि बटन और मेरे स्वयं के इशारा पहचानकर्ताओं को आईओएस 6 में प्राथमिकता होगी ... क्या यह आईओएस 5 में भी बदलाव है? धन्यवाद। –

+0

@ जैक: हाँ, मुझे लगता है कि यह एक बदलाव है (और मुझे लगता है कि पुराने दृष्टिकोण को अब और अधिक मामलों की आवश्यकता नहीं है) –

+0

बस इसे आजमाने का मौका मिला और यह काम किया। धन्यवाद! –

0

आप जोड़ने की जरूरत है

if (currentIndex == 0 || (index == NSNotFound)) { 

    //if on the first page, can't go back 
    return nil; 

} 
+0

क्षमा करें, यह काम नहीं किया। यह अभी भी दुर्घटनाग्रस्त है। रिटर्निंग 'शून्य' मुद्दा है। यह किसी कारण से यह पसंद नहीं करता है। अगर कथन को बदलने की जरूरत नहीं है। –

+0

क्या आप शून्य पर ब्रेकपॉइंट डाल सकते हैं और जांच सकते हैं कि यह इस ब्लॉक में प्रवेश कर रहा है या नहीं? –

+0

यह है, मैंने पहले 'NSLog' का उपयोग किया था और इसकी सामग्री को आउटपुट किया था। फिर, यह सब आईओएस 5 में ठीक काम किया। यह आईओएस 6 है जो समस्याएं पैदा कर रहा है। –

0

Xcode पृष्ठ आवेदन के आधार का नवीनतम संस्करण टेम्पलेट निम्नलिखित कोड प्रदान करता है अपने कोड के लिए निम्न:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController]; 
    if ((index == 0) || (index == NSNotFound)) { 
    return nil; 
} 

index--; 
return [self viewControllerAtIndex:index storyboard:viewController.storyboard]; 
} 

कि चाल करना चाहिए: -)

+0

धन्यवाद, लेकिन यह काम नहीं किया। रिटर्निंग 'शून्य' मुद्दे का कारण बनता है। जब मैं 'शून्य 'के अलावा एक मूल्य वापस करता हूं, तो यह ठीक काम करता है। अगर मैं काम नहीं करता तो पहले पृष्ठ से पहले पेज पर जाने से मैं इसे कैसे रोकूं? –

संबंधित मुद्दे