Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从照片库共享图像时出现iOS共享扩展问题_Ios_Objective C_Xcode_Share_Share Extension - Fatal编程技术网

从照片库共享图像时出现iOS共享扩展问题

从照片库共享图像时出现iOS共享扩展问题,ios,objective-c,xcode,share,share-extension,Ios,Objective C,Xcode,Share,Share Extension,下面是我用来在“ShareViewController.m”中共享图像的代码 如果我分享一张WhatsApp的图片,一切都很好但如果我想共享照片库或Facebook Messenger中的图像,则该功能无效 有人知道问题出在哪里吗 谢谢以下是我解决问题的方法。我去掉了(NSString*)kUTTypeURL],添加了itemProvider.registeredTypeIdentifiers,以获取包含所有可用类型标识符的数组。然后,我只使用第一个可用的作为registeredTypeIden

下面是我用来在“ShareViewController.m”中共享图像的代码

如果我分享一张WhatsApp的图片,一切都很好但如果我想共享照片库或Facebook Messenger中的图像,则该功能无效

有人知道问题出在哪里吗


谢谢

以下是我解决问题的方法。我去掉了
(NSString*)kUTTypeURL]
,添加了
itemProvider.registeredTypeIdentifiers
,以获取包含所有可用类型标识符的数组。然后,我只使用第一个可用的作为
registeredTypeIdentifiers.firstObject

另外,非常重要
NSData*data
已更改为
id项
,这使得从中获取
NSData
有点不同。这一点非常重要,尤其是在从Messenger共享图像时-它们的类型标识符是“public.image”,而不是像照片库或WhatsApp中那样的“public.jpeg”或“public.url”

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

   }];
}
NSExtensionItem*item=[self.extensionContext.inputItems objectAtIndex:i];
NSItemProvider*itemProvider=item.attachments.firstObject;
//获取文件扩展名的类型(jpeg、文件、url、png…)
NSArray*registeredTypeIdentifiers=itemProvider.registeredTypeIdentifiers;
if([itemProvider hasItemConformingToTypeIdentifier:registeredTypeIdentifiers.firstObject){
[itemProvider loadItemForTypeIdentifier:registeredTypeIdentifiers.firstObject选项:nil completionHandler:^(id项,NSError*错误){
NSData*imgData;
如果([(NSObject*)项是kindof类:[NSURL类]]){
imgData=[NSData DATA with contents sofURL:(NSURL*)项];
}
如果([(NSObject*)项是kindof类:[UIImage类]]){
imgData=UIImagePngResentation((UIImage*)项);
}
//上传脚本的其余部分在这里
}];
}

我就是这样解决的。我去掉了
(NSString*)kUTTypeURL]
并添加了
itemProvider。registeredTypeIdentifiers
以获取包含所有可用类型标识符的数组。然后,我只使用第一个可用的作为
registeredTypeIdentifiers.firstObject

另外,非常重要
NSData*data
已更改为
id项
,这使得从中获取
NSData
有点不同。这一点非常重要,尤其是在从Messenger共享图像时-它们的类型标识符是“public.image”,而不是像照片库或WhatsApp中那样的“public.jpeg”或“public.url”

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

   }];
}
NSExtensionItem*item=[self.extensionContext.inputItems objectAtIndex:i];
NSItemProvider*itemProvider=item.attachments.firstObject;
//获取文件扩展名的类型(jpeg、文件、url、png…)
NSArray*registeredTypeIdentifiers=itemProvider.registeredTypeIdentifiers;
if([itemProvider hasItemConformingToTypeIdentifier:registeredTypeIdentifiers.firstObject){
[itemProvider loadItemForTypeIdentifier:registeredTypeIdentifiers.firstObject选项:nil completionHandler:^(id项,NSError*错误){
NSData*imgData;
如果([(NSObject*)项是kindof类:[NSURL类]]){
imgData=[NSData DATA with contents sofURL:(NSURL*)项];
}
如果([(NSObject*)项是kindof类:[UIImage类]]){
imgData=UIImagePngResentation((UIImage*)项);
}
//上传脚本的其余部分在这里
}];
}

此答案非常有用。截图刚被捕获,我就试图分享截图,但当我试图使用kUTTypeImage访问截图时,截图返回了数据,但已损坏。然后,此答案帮助我确定了问题区域,即我应该使用id项,而不是使用NSURL或NSData。添加了问题的简短说明以提供帮助其他。谢谢@Ekashking此答案非常有用。我试图在截图被捕获后共享截图,但当我试图使用kUTTypeImage访问截图时,截图返回了数据,但已损坏。然后此答案帮助我确定了问题区域,即我应该使用id项而不是使用NSURL或NSData。添加了对m的简短描述我很乐意帮助别人。谢谢@ekashking