我是靠谱客的博主 壮观大白,最近开发中收集的这篇文章主要介绍使用分享扩展在应用之间传递数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单的研究了扩展,记录一下

  1,创建一个分享扩展

 File ----> New --- >Target  出现


在项目中就会出现  


要传递数据的需要设置App Groups



在扩展中也设置同样的





调试扩展





在扩展中打开Container App



在扩展中设置跳转的代码

//  在扩展中打开 contaier app 
- (void)openApp {
    NSString *destURLString = @"doubiDemo://";
    UIResponder* responder = self;
    while ((responder = [responder nextResponder]) != nil){
        if([responder respondsToSelector:@selector(openURL:)] == YES){
            [responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:destURLString]];
            [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];
        }
    }
}


我做的是 从其他应用里面传文件过来,,例如从微信将ppt 传到我们的应用

我简单的理解是 将微信中ppt 文件 复制到 扩展  ,我们的应用在从扩展中去取数据


 我的示例代码

#import "ShareViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
@interface ShareViewController ()

@end

@implementation ShareViewController

-(void)viewDidLoad{
    [super viewDidLoad];
  
    NSExtensionItem *extensionItem = [self.extensionContext.inputItems firstObject];
    
    __weak __typeof(self) __weak_self = self;
    BOOL isExit = YES;
    for(NSItemProvider *itemProvider in [extensionItem attachments]) {
        if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeFileURL]) {
            isExit = NO;
            [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeFileURL options:nil completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {
                
                NSURL *URL = (NSURL *)item;
                if ([URL isFileURL] && [__weak_self copyResToAppGroup:URL])
                    [__weak_self openApp ];
                else
                    [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];
            }];
        }
    }
    if (isExit) [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];
}
//  在扩展中打开 contaier app 
- (void)openApp {
    NSString *destURLString = @"doubiDemo://";
    UIResponder* responder = self;
    while ((responder = [responder nextResponder]) != nil){
        if([responder respondsToSelector:@selector(openURL:)] == YES){
            [responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:destURLString]];
            [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];
        }
    }
}

// 将文件复制到 app group
- (BOOL) copyResToAppGroup:(NSURL *) sorURL
{
    NSError *error = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    NSURL *groupURL = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.DoubiDemo"];
    groupURL = [groupURL URLByAppendingPathComponent:@"upload"];
    
    BOOL isDir = NO;
    if (![fileManager fileExistsAtPath:groupURL.relativePath isDirectory:&isDir] && !isDir)
        [fileManager createDirectoryAtURL:groupURL withIntermediateDirectories:YES attributes:nil error:&error];
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyyMMddHHmmss"];
    NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
    NSString *name = [[sorURL lastPathComponent] stringByDeletingPathExtension];
    NSString *ext = [sorURL pathExtension];
    
    groupURL = [groupURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@.%@", name, currentDateStr, ext]];
  
    return [fileManager copyItemAtURL:sorURL toURL:groupURL error:&error];
}



注意:需要 #import <MobileCoreServices/MobileCoreServices.h>










最后

以上就是壮观大白为你收集整理的使用分享扩展在应用之间传递数据的全部内容,希望文章能够帮你解决使用分享扩展在应用之间传递数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部