iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

栏目: IOS · 发布时间: 5年前

内容简介:本文主要讲一下如何用userdefaults在Today Extension和主App间传一些简单数据,传复杂数据的话需要用到数据库,其实大同小异。众所周知,iOS有沙盒机制,不同App之间无法直接共享数据,Today Extension和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数据,苹果为了在不打破沙盒的前提下能够传数据,就想出了App Group的方法。也就是说只要是属于一个组的App,就能互相传数据。

本文主要讲一下如何用userdefaults在Today Extension和主App间传一些简单数据,传复杂数据的话需要用到数据库,其实大同小异。

众所周知,iOS有沙盒机制,不同App之间无法直接共享数据,Today Extension和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数据,苹果为了在不打破沙盒的前提下能够传数据,就想出了App Group的方法。

也就是说只要是属于一个组的App,就能互相传数据。

先跟着下图走,添加一下today的小组件:

iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

选Toady Extension,取个名字,我们这里是MyToady

iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

找到主App的Target的Capabilities,把App Groups设为ON

iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

点加号创建一个组,弹出框让我们给这个组取个名字,名字要求是唯一的,所以一般用group+bundle ID就好了

iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

同样找到Toady的Target的App Group这里,选ON,等待几秒钟,就会出现刚刚我们在主App那里创建的App Group,选中这个组。

iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

最后在主App的storyboard上弄一个label,用来待会把里面的文本传给Toady

iOS-Widgets小组件-Today Extension和主App之间的简单数据共享

准备工作完毕,上代码

ViewController:

class ViewController: UIViewController {

    //主App上的label
    @IBOutlet weak var hostData: UILabel!
    
    //创建一个userdefaults用来共享简单数据(之后的用法和UserDefaults.standard一样)
    //这里的name就是刚刚我们创建的App Group的名字
    let sharedDefaults = UserDefaults(suiteName: "group.com.rongcosme.TodayTest")
    
    //根据业务逻辑在合适的地方把主App的数据存进sharedDefaults,这里为了演示方便就放在viewDidAppear里
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        sharedDefaults?.set(hostData.text!, forKey: "sharedData")
    }
}
复制代码

TodayViewController:

class TodayViewController: UIViewController, NCWidgetProviding {
    
    //today小组件上的label,用于显示主App传过来的数据
    @IBOutlet weak var todayData: UILabel!
    
    //同样是创建一个userdefaults
    let sharedDefaults = UserDefaults(suiteName: "group.com.rongcosme.TodayTest")
    
    //一般是在willappear里面,把主App放在UserDefaults里的数据取出来
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        //这里共享的是string类型的数据,就用string方法
        todayData.text = sharedDefaults?.string(forKey: "sharedData")
    }
        
    func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
        completionHandler(NCUpdateResult.newData)
    }
}
复制代码

以上所述就是小编给大家介绍的《iOS-Widgets小组件-Today Extension和主App之间的简单数据共享》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML Dog

HTML Dog

Patrick Griffiths / New Riders Press / 2006-11-22 / USD 49.99

For readers who want to design Web pages that load quickly, are easy to update, accessible to all, work on all browsers and can be quickly adapted to different media, this comprehensive guide represen......一起来看看 《HTML Dog》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具