2013-09-27 6 views
6

SpriteKit को साफ और सभी टाइमर को थामने जब आप घर बटन दबाएँ माना जाता है।होम बटन प्रेस SpriteKit SKView में EXC_BAD_ACCESS कोड = 1 का कारण बनता है

हालांकि, हमने पाया है कि यदि आप एक नल घर बटन, जबकि एक सक्रिय SKView ऐप्लिकेशन क्रैश प्रदर्शित। यह तब भी होता है जब वह दृश्य उपयोगकर्ता द्वारा पहले से ही रोका गया हो।

अजीब है, अगर आप डबल टैप होम बटन और मल्टीटास्किंग को देखने के लिए ले जाते हैं, सब कुछ ठीक काम करता है।

ऊपर का पालन ध्यान दें: सिम्युलेटर दोनों स्थितियों में पूरी तरह से काम करता है, कोई दुर्घटना

किसी और SpriteKit के साथ इस मुद्दे को देख रहा है?

क्या आपको कारण/समाधान मिला है?

+0

कृपया जो भी आप पूछ रहे हैं उससे अधिक विशिष्ट हो। क्या आप एक कामकाज चाहते हैं? जोडना? एक स्पष्टीकरण? –

+0

इसके अलावा, आप देव मंचों में पूछना चाह सकते हैं। –

+1

मुझे एक ही समस्या है। यह जानकर खुशी हुई कि यह मेरे सिर में नहीं है :) –

उत्तर

10

मैं एक ही समस्या हो रही थी और मैं इसे मैन्युअल ViewController में जड़ SKView एप्लिकेशन को पृष्ठभूमि में जाने से पहले रोक हल:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Configure the view (already setup as SKView via storyboard) 
    SKView * skView = (SKView *)self.view; 

    // Create and configure the scene. 
    SKScene *scene = [Menu sceneWithSize:CGSizeMake(skView.bounds.size.height, skView.bounds.size.width)]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 

    // Present the scene. 
    [skView presentScene:scene]; 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(appWillEnterBackground) 
    name:UIApplicationWillResignActiveNotification 
    object:NULL]; 
} 

- (void)appWillEnterBackground 
{ 
    SKView *skView = (SKView *)self.view; 
    skView.paused = YES; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(appWillEnterForeground) 
    name:UIApplicationWillEnterForegroundNotification 
    object:NULL]; 
} 

- (void)appWillEnterForeground 
{ 
    SKView * skView = (SKView *)self.view; 
    skView.paused = NO; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(appWillEnterBackground) 
    name:UIApplicationWillResignActiveNotification 
    object:NULL]; 
} 
+0

बस इसका इस्तेमाल किया और महान काम करता है! धन्यवाद – BSevo

+0

यह निश्चित रूप से लोगों के पास अधिक आम मुद्दा होगा ... इसलिए मैंने इसे स्वीकार कर लिया। – MobileVet

+1

तंजोलोन का जवाब बहुत अच्छा है, हालांकि, यदि आप अधिसूचना केंद्र को खींचते हैं तो ऐप रुक जाएगा, लेकिन जब आप अधिसूचना केंद्र को बैक अप करते हैं तो यह रुक जाएगा नहीं। मुझे बस इस समस्या का सामना करना पड़ा और दूसरों को यह पता चला कि मैंने ऐसा किया है: "- (शून्य) AppWillEnterBackground" बदलें "नाम: UIAplplicationWillEnterBackground" से "नाम: UIAplplicationDidBecomeActiveNotification" –

0
  1. यह निर्धारित करने के लिए कि आपके कोड में मेमोरी प्रबंधन समस्याएं हैं या नहीं, यह निर्धारित करने के लिए एक्सकोड के विश्लेषक (प्रोजेक्ट> विश्लेषण) चलाएं।

  2. भागो उपकरण एप्लिकेशन (परियोजना> प्रोफ़ाइल) है, जो स्मृति में से किसी का पता चला दुरुपयोग रिपोर्ट कर सकते हैं के आवंटन साधन में इस परिदृश्य।

0

हम UICollectionView साथ कुछ इसी तरह असंगत व्यवहार का सामना किया। उस स्थिति में, ऑब्जेक्ट को स्टोरीबोर्ड (बनाम प्रोग्रामेटिक रूप से) के माध्यम से जारी करने से समस्या हल हो गई।

एक झुकाव पर, मैंने आज सुबह और व्हायोला की सफलता की कोशिश की!

तो, ऐसा लगता है कि स्टोरीबोर्ड उन हमें अज्ञात है और उन्हें ठीक से होम बटन प्रेस पर समाप्त किया जा करने की अनुमति देता है कि निर्माण पर SKView के साथ कुछ जादू कर रहे हैं। निराशाजनक, लेकिन कम से कम यह अब काम करता है।

+0

इसके अतिरिक्त, एसकेवीव के लिए एफपीएस सेट करना केवल तभी काम करता है जब आप स्टोरीबोर्ड – MobileVet

+0

में दृश्य को तुरंत चालू करते हैं, तो अधिक जानकारी, यह हो सकता है कि हमारे कॉल 'initWithCoder' या 'initWithFrame' के बजाय 'init' पर हो, जो ठीक से काम करने लगते हैं। – MobileVet

0

समस्या, ऑडियो के कारण हो सकता यदि ऐसा है तो आप जाँच कर सकते हैं इस सवाल का जवाब यहाँ https://stackoverflow.com/a/19283721/1278463

मैं एक खेल है, जिसमें ऑडियो का उपयोग नहीं कर रहा है में इस हल किया। Th समाधान पृष्ठभूमि में प्रवेश करते समय SKView को रोकना है:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    SKView *view = (SKView *)self.window.rootViewController.view; 
    if (view) { 
     view.paused = YES; 
    } 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    SKView *view = (SKView *)self.window.rootViewController.view; 
    if (view) { 
     view.paused = NO; 
    } 
} 
संबंधित मुद्दे