2015-01-21 28 views
5

Vì vậy, trong ứng dụng của tôi, tôi muốn chia sẻ điều gì đó bằng cách sử dụng UIActivityViewController.Ứng dụng chạy tốt trong iOS 8, nhưng không chạy trên iOS 7

Để đảm bảo rằng các hoạt động chia sẻ thành công, tôi có mã này:

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 
     } 
    }]; 

Kể từ khi tôi đã sao chép (và sửa đổi) mã này, tôi không muốn tuyên bố rằng tôi hoàn toàn hiểu được những gì xảy ra ở đây.

Điều tôi làm biết và đây là câu hỏi của tôi, là mã ở trên chạy tốt trên iOS 8 nhưng không chạy trên iOS 7, phần cứng hoặc trình mô phỏng.

Tôi rất hy vọng rằng ai đó có thể giải thích cho tôi những gì đang diễn ra ở đây.

+1

Bạn có gặp bất kỳ lỗi nào không? – AstroCB

+0

Có, nó nói: '- [UIActivityViewController setCompletionWithItemsHandler:]: bộ chọn không được nhận dạng được gửi tới instance 0x7beb0730' – Sjakelien

+0

Thuộc tính đó không khả dụng trên iOS 7 –

Trả lời

9

Thuộc tính completionWithItemsHandler không có sẵn trong iOS 7, vì nó đã được giới thiệu trong iOS 8.

gì bạn đang tìm kiếm là bây giờ bị phản đối completionHandler bất động sản; nếu mục tiêu triển khai của bạn dưới iOS 8, bạn chỉ có thể sử dụng điều này, nhưng nếu bạn muốn trở thành tương lai chứng minh, bạn có thể kiểm tra xem các handler mới được hỗ trợ, và nếu không, sử dụng bộ xử lý cũ:

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 
      } 
     }]; 
    } 
} 

Ngoài ra, bạn có thể đã bỏ qua này cho ngắn gọn, nhưng điều quan trọng là bạn thực sự trình bày các bộ điều khiển xem sau khi khởi tạo nó:

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

cảm ơn. Tôi đã trình bày bộ điều khiển xem – Sjakelien

1

OK, vì vậy đây là những gì tôi đã làm. Nhiều khả năng, Kremelur đã trả lời nó một cách tổng quát, nhưng tôi quá nhiều người mới để hiểu điều đó. Vì vậy, tôi đã sao chép và dán một số nội dung, sau một số câu trả lời chéo. Tôi hy vọng điều này là của bất kỳ sử dụng cho một ai đó.

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

Mã này dường như hoạt động tốt trên cả iOS7 và iOS8.

Các vấn đề liên quan