8

मेरे ऐप में मैं UIActivityController के अंदर "ओपन इन" एक्शन डालने के लिए TTOpenInAppActivity का उपयोग कर रहा हूं। इसके अंदर इस तरह काम करता है:आईओएस 8 समापन ब्लॉक

कुछ दृश्य नियंत्रक के साथ TTOpenInActivity पहले से ही में बनाया गया UIActivityController प्रस्तुत

-(void)openWithAction 
{ 
    NSURL *fileURL = SOME_URL; 
    CGRect rect = SOME_RECT; 
    TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:self.view andRect:rect]; 
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fileURL] applicationActivities:@[openInAppActivity]]; 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ 
     // Store reference to superview (UIActionSheet) to allow dismissal 
     openInAppActivity.superViewController = activityViewController; 
     // Show UIActivityViewController 
     [self presentViewController:activityViewController animated:YES completion:NULL]; 
    } else { 
     // code for iPad, irrelevant 
    } 
} 

जब उपयोगकर्ता टैप करता बटन "में खोलें", निम्न विधि शुरू हो रहा है:।

- (void)performActivity 
{ 
    if(!self.superViewController){ 
     [self activityDidFinish:YES]; 
     return; 
    } 

    // Dismiss activity view 
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ 
     // iPhone dismiss UIActivityViewController 
     [self.superViewController dismissViewControllerAnimated:YES completion:^(void){ 

      if (self.fileURLs.count > 1) { 
       [self openSelectFileActionSheet]; 
      } 
      else { 
       // Open UIDocumentInteractionController 
       [self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject]; 
      } 
     }]; 
    } else { 
     // code for iPad, irrelevant 
     } 
    } 
} 

ऐप केवल आईफोन के लिए है, कोड का यह टुकड़ा निष्पादित किया जाना चाहिए:

[self.superViewController dismissViewControllerAnimated:YES completion:^(void){ 

       if (self.fileURLs.count > 1) { 
        [self openSelectFileActionSheet]; 
       } 
       else { 
        // Open UIDocumentInteractionController 
        [self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject]; 
       } 
}]; 

आईओएस 7 में सबकुछ ठीक काम करता है। आईओएस 8 UIActivityController में खारिज कर दिया गया है और फिर कुछ भी नहीं होता है। डीबगिंग करते समय मैंने यह पता लगाने का प्रबंधन किया कि आईओएस 8 में पूरा होने वाले हैंडलर को कभी नहीं कहा जाता है।

कृपया, इस व्यवहार के कारण का पता लगाने में मेरी सहायता करें और इसे कार्य करें।

अग्रिम धन्यवाद।

उत्तर

5

आईओएस 8 में, जब आप "ओपन इन" पर टैप करते हैं, तो UIActivityViewController स्वचालित रूप से खारिज कर दिया जाता है। इसलिए, जब आप self.superViewController dismissViewControllerAnimated:completion: पर कॉल करते हैं, तो देखें नियंत्रक पहले से ही खारिज कर दिया गया था और विधि कुछ भी नहीं (इसलिए पूरा नहीं कहा जाता है)।