2012-11-05 17 views
7

पर बाद के कॉल पर क्रैश होता है अगर हम बंद करने के लिए कॉल के बाद openWithBehavior को कॉल करते हैं और CleleTokenInformation, यह EXC_BAD_ACCESS का कारण बनता है। भले ही यह मूल आईओएस अंतर्निहित संवाद या तेजी से स्विचिंग वाले लोगों में से एक का उपयोग कर रहा हो।फेसबुक आईओएस एसडीके 3.1 एफबीएसशन ओपन विथबैवियर

हमारे कोड के माध्यम से काम करता है अमेरिकन प्लान, पहली बार के लिए लॉग इन करने के लिए:

if (![FBSession activeSession]) { 
    #ifdef FREE_APP 
     NSString* suffix = @"free"; 
    #else 
     NSString* suffix = @"paid"; 
    #endif 
    FBSession *session = [[[FBSession alloc] initWithAppID:@"111111111111111" 
          permissions:permissions 
         urlSchemeSuffix:suffix 
        tokenCacheStrategy:nil] autorelease]; 
    [FBSession setActiveSession:session]; 
} 
else if ([FBSession activeSession].isOpen) 
    [[FBSession activeSession] close]; 

[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
       completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
            [self sessionStateChanged:session state:state error:error]; 
           }]; 

हमारे कोड से प्रस्थान करना है, जिसके बाद कोड ऊपर openWithBehavior के बाद विफल रहता है:

[[FBSession activeSession] closeAndClearTokenInformation]; 

मैं शुरू में openActiveSessionWithReadPermissions बजाय उपयोग कर रहा था 3.1 डॉक्स में निर्धारित अनुसार, OpenBithBehavior, जो क्रैश नहीं होता है लेकिन एफबी ऐप/सफारी से वापस स्विच करने वाला ऐप काम नहीं करता है। शायद प्रत्यय की आवश्यकता के कारण? यदि ऐप स्विचिंग को ठीक करना और उस पर वापस जाना सबसे आसान होगा, तो कृपया सलाह दें।

धन्यवाद।

if (!(self.state == FBSessionStateCreated || 
     self.state == FBSessionStateCreatedTokenLoaded)) { 
    // login may only be called once, and only from one of the two initial states 
    [[NSException exceptionWithName:FBInvalidOperationException 
          reason:@"FBSession: an attempt was made to open an already opened or closed session" 
          userInfo:nil] 
    raise]; 
} 

मैं:

उत्तर

7

जब मैं 5.x सिम्युलेटर में भाग गया, मैं एक अतिरिक्त, बहुत उपयोगी, त्रुटि openWithBehavior से संदेश देखा, तो यह स्रोत है जो चीजों को और अधिक स्पष्ट करता है में देखा मैंने OpenWithBehavior को कॉल करने से पहले हमेशा एक नया सत्र बनाने के लिए अपना कोड बदल दिया है और यह खुश लगता है।

अद्यतन: यहाँ अद्यतन कोड है कि एक सक्रिय सत्र के लिए जाँच करता है, तो यह बंद कर देता है, हमेशा एक ताजा सत्र instantiating से पहले ...

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 


     if ([FBSession activeSession]) 
     [[FBSession activeSession] closeAndClearTokenInformation]; 

     #ifdef FREE_APP 
     NSString* suffix = @"free"; 
     #else 
     NSString* suffix = @"paid"; 
     #endif 

     NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil]; 

     FBSession *session = [[FBSession alloc] initWithAppID:mFacebookID 
               permissions:permissions 
              urlSchemeSuffix:suffix 
             tokenCacheStrategy:nil]; 

     [FBSession setActiveSession:session]; 

     If (allowLoginUI == YES) { 
     NSLog(@"Calling openWithBehavior"); 
     [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
            completionHandler:^(FBSession *session, FBSessionState state, NSError *error) 
            { 
             [self sessionStateChanged:session state:state error:error]; 
            } 
     ]; 
    } else if(session.state == FBSessionStateCreatedTokenLoaded) { 
     NSLog(@"Calling openWith completion handler"); 
     [session openWithCompletionHandler:^(FBSession *_session, FBSessionState status, NSError *error) 
              { [self sessionStateChanged:session state:status error:error];} 
     ]; 
    } 

    [session release]; 

    return true; 
    } 
+0

, मैं कहाँ करने के लिए नहीं मिला और क्यों इस कोड लिखने । और मैंने इसे खोलने से पहले लिखा था विथबैथवियर अभी भी इसे ओपन विथबैवियर – Heena

+0

में क्रैश हो गया है ऊपर दिया गया पहला स्निपेट फेसबुक क्लास से है जो त्रुटि को फेंक रहा था। मैंने इसे केवल उस घटना में जोड़ने के लिए शामिल किया जो हो रहा था। मैं आगे बढ़ गया और हमेशा एक नया सत्र बनाने से पहले सक्रिय सत्र के लिए चेक जोड़ने और इसे बंद करने के बाद अपना कोड जोड़ा। – leontx

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