2015-01-21 7 views
5

Also, in meiner App möchte ich etwas mit der UIActivityViewController teilen.App läuft gut in iOS 8, aber nicht in iOS 7

Um sicherzustellen, dass die gemeinsame Nutzung Aktivität erfolgreich war, ich habe diesen Code:

UIActivityViewController *controller = [[UIActivityViewController alloc] 
                initWithActivityItems:@[text, shortURL, image] 
                applicationActivities:nil]; 
[controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { 
      if (! completed){ 
      // Here I do some stuff irrelevant to the question 
     } 
    }]; 

Da ich kopiert (und modifiziert) dieser Code, ich will nicht behaupten, dass ich völlig verstehen, was ist passiert hier.

Was ich tun wissen, und das ist meine Frage, ist, dass der Code oben läuft gut auf iOS 8, aber nicht auf iOS 7, Hardware oder Simulator.

Ich hoffe sehr, dass mir jemand erklären kann, was hier vor sich geht.

+1

Haben Sie Fehler bekommen? – AstroCB

+0

Ja, es heißt: '- [UIActivityViewController setCompletionWithItemsHandler:]: unerkannter Selektor an Instanz 0x7beb0730 gesendet' – Sjakelien

+0

Diese Eigenschaft ist nicht auf iOS 7 –

Antwort

9

Die completionWithItemsHandler Eigenschaft ist in iOS nicht verfügbar 7, wie es in iOS eingeführt wurde 8.

Was Sie suchen ist die inzwischen veraltet completionHandler Eigenschaft; Wenn Ihre Bereitstellung Ziel unter iOS 8, können Sie nur diese, aber wenn Sie zukunftssicher sein wollen, können Sie überprüfen, ob die neuen Handler unterstützt werden, und wenn nicht, verwenden Sie den alten Handler:

if([[UIApplication sharedApplication] respondsToSelector:(@selector(setCompletionWithItemsHandler:))]){ 
     [controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { 
      if(!completed){ 
       // Out of scope of question 
      } 
     }]; 
    }else{ 
     [controller setCompletionHandler:^(NSString *activityType, BOOL completed) { 
      if(!completed){ 
       // Out of scope of question 
      } 
     }]; 
    } 
} 

Außerdem können Sie dies der Kürze halber weggelassen, aber es ist wichtig, dass Sie tatsächlich die view-Controller präsentieren sie nach der Initialisierung:

[self presentViewController:controller animated:YES completion:nil]; 
+0

danke. Ich habe den View-Controller vorgestellt – Sjakelien

1

OK, also das ist, was ich tat. Am wahrscheinlichsten hat Kremelur es allgemein gesagt, aber ich bin zu viel von einem Anfänger, um das zu verstehen. Also kopierte und klebte ich ein paar Sachen nach etwas Cross-googeln. Ich hoffe, dass das für jemanden von Nutzen ist.

[controller setCompletionHandler:^(NSString *activityType, BOOL completed) { 
     NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed); 
     if (! completed){ 
      // Out of scope of question 
     } 
    }]; 

Dieser Code scheint in iOS7 und iOS8 gut zu funktionieren.