2017-11-20 16 views
0

以下は、「ShareViewController.m」内で画像を共有するために使用するコードです。フォトライブラリから画像を共有するときのiOS共有拡張の問題

NSExtensionItem *item = [self.extensionContext.inputItems objectAtIndex:i]; 
NSItemProvider *itemProvider = item.attachments.firstObject; 

if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) { 
    [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSData *data, NSError *error) { 

      NSLog(@"%@", data); 

      // the rest of uploading script goes here 

    }]; 
} 

WhatsAppから画像を共有するとすべて正常に動作します。 写真ライブラリやFacebookメッセンジャーから画像を共有したい場合は動作しません。

問題の原因を知っている人はいますか?

ありがとうございました

答えて

2

ここで私はそれをどのように解決しましたか?私は(NSString *)kUTTypeURL]を取り除き、利用可能なすべての型識別子を持つ配列を得るためにitemProvider.registeredTypeIdentifiersを追加しました。それから私はちょうどregisteredTypeIdentifiers.firstObjectとして利用可能な最初のものを使用しています。

また

非常に重要なNSData *dataはそれからNSDataを得るために、それは少し違うそのid<NSSecureCoding> itemに変更しました。特に、写真ライブラリやWhatsAppのように、"public.jpeg"または"public.url"ではなく、タイプ識別子が"public.image"で、メッセンジャーから画像を共有するときに重要です。

NSExtensionItem *item = [self.extensionContext.inputItems objectAtIndex:i]; 
NSItemProvider *itemProvider = item.attachments.firstObject; 

// get type of file extention (jpeg, file, url, png ...) 
NSArray *registeredTypeIdentifiers = itemProvider.registeredTypeIdentifiers; 

if ([itemProvider hasItemConformingToTypeIdentifier:registeredTypeIdentifiers.firstObject) { 
    [itemProvider loadItemForTypeIdentifier:registeredTypeIdentifiers.firstObject options:nil completionHandler:^(id<NSSecureCoding> item, NSError *error) { 

      NSData *imgData; 
      if([(NSObject*)item isKindOfClass:[NSURL class]]) { 
       imgData = [NSData dataWithContentsOfURL:(NSURL*)item]; 
      } 
      if([(NSObject*)item isKindOfClass:[UIImage class]]) { 
       imgData = UIImagePNGRepresentation((UIImage*)item); 
      } 



      // the rest of uploading script goes here 

    }]; 
} 
関連する問題