2013-08-03 18 views
1

目前我使用下面的代碼實例化一個UIActivityViewController檢測錯誤:UIActivityViewController - 在發送與取消

NSArray *itemsToShare = [[NSArray alloc] initWithObjects:bodyMessage, nil]; 
     UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
     activityVC.excludedActivityTypes = [[NSArray alloc] initWithObjects: UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypePostToWeibo,UIActivityTypePostToFacebook,UIActivityTypePostToTwitter, nil]; 
     [activityVC setValue:subject forKey:@"subject"]; 
     [self presentViewController:activityVC animated:YES completion:nil]; 


     [activityVC setCompletionHandler:^(NSString *activityType, BOOL done) 
     { 

      NSString *ServiceType; 
      if ([activityType isEqualToString:UIActivityTypeMail])   ServiceType = @"Mail."; 
      if ([activityType isEqualToString:UIActivityTypeMessage]) ServiceType = @"Messenger."; 

      NSMutableString *shareWithActivityResultMessage; 
      NSString *alertTitle; 
      if (done) 
      { 
       alertTitle = @"Success!"; 

       shareWithActivityResultMessage = [NSMutableString stringWithString:successMessage]; 
       [shareWithActivityResultMessage appendString:ServiceType]; 
      } 
      else 
      { 
       // didn't succeed. 
       alertTitle = @"Error"; 
       shareWithActivityResultMessage = [NSMutableString stringWithString:errorMessage]; 
      } 

當我取消作曲,在ActivityVC done = false,因此錯誤信息被觸發。有沒有辦法檢測取消,而不是發送消息中的實際錯誤?

+0

該文檔明確指出,即使用戶取消完成處理程序被調用。在這種情況下,「完成」將是「否」。這並不表示有錯誤。你不應該因爲'done'是'NO'而顯示錯誤提示。事實上,'UIActivityViewController'不會給出任何類型的錯誤。 – rmaddy

回答

2

您可以使用新的UIActivityViewControllerCompletionWithItemsHandler類型的iOS 8:

activityVC.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError){ 
    ... 
} 

只需選中activityError財產