2017-11-20 28 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 

    }]; 
}