簡體   English   中英

iOS共享擴展名未獲取圖像

[英]iOS share extension not getting the image

我敢肯定,一旦有人將我指向正確的方向,這對我來說是微不足道的,所以我道歉詢問一個愚蠢的問題。 但是我一直在尋找無法弄清楚自己在做什么錯的日子。

方案:創建一個簡單的共享擴展名以接收圖像文件

問題:當我訪問附件時,盡管我可以在itemProvider中看到“ public.jpg”,但從未調用該處理程序,但是卻看不到數據在哪里?

我做了什么:

1) defined NSExtensionActivationSupportsImageWithMaxCount = 1 as my only activation rule
2) added CoreMedia framework to the extension
3) added the same group to both app and app extension
4) made sure both have the group (1) in the entitlement
5) made sure both are using a certificate/app id with that group enabled
6) clean and rebuild several times to no avail.

編碼:

- (void)didSelectPost {
/
for (NSExtensionItem *item in self.extensionContext.inputItems) {
    for (NSItemProvider *itemProvider in item.attachments) {
        if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) {
I can hit this breakpoint --> [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error) {
but not this one --> photo = image;
            }];
            break;
        }
    }
}
.... and so on and so forth

您尚未發布完整的代碼,但我懷疑您在錯誤的位置調用了completeRequestReturningItems:completionHandler: ::

錯誤

- (void)didSelectPost {
        NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
        NSItemProvider *itemProvider = item.attachments.firstObject;
        if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) {
            [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage
                                            options:nil
                                  completionHandler:^(NSURL *url, NSError *error) {
                                      // send the image
                                  }];
        }
        // ↓ this is the wrong location ↓
        [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
    }

問題在於,調用completeRequestReturningItems:completionHandler:立即關閉ShareViewController並對其進行分配。 因此,包含圖像的NSItemProvider在訪問圖像之前也會被銷毀(因為它異步加載其項目)。 換句話說:永遠不會調用將圖像發送到服務器的完成處理程序,因為整個shareViewController已經被釋放。

要解決該問題,您必須在發送圖像之后將對completeRequestReturningItems:completionHandler:的調用移至完成處理程序的末尾。

正確:

- (void)didSelectPost {
    NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
    NSItemProvider *itemProvider = item.attachments.firstObject;
    if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) {
        [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage
                                        options:nil
                              completionHandler:^(NSURL *url, NSError *error) {
                                  // send the image
                                  [self.extensionContext completeRequestReturningItems:@[]         
                                                                     completionHandler:nil];
                              }];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM