iOS 开发之Widget的开发及使用(下)

在iOS 开发之Widget的开发及使用(上)中都交代清楚了关于widget扩展的添加,以及布局部分的内容,下面说下关键部分:关于数据共享的操作。

在Apple发布iOS8.0以后,对App有提供一个新的扩展选择项,叫做App groups,选择宿主Target之后,在capabilities选项卡下面会找到这个选项:技术分享

那么这个选项主要是做何使用呢?

iOS系统,每个开发应该都清楚,其内部程序都是遵循沙盒机制,App与App之间,是不能进行数据共享的,A 不能访问 B 的数据,同样 B 也不能访问 A 的数据。不要问为什么,iOS天生就这样任性。

为了能够让widget共享到宿主程序中的数据,所以,App groups这个功能就应运而生了。

选择宿主程序的Target,打开这个选项,然后添加你所需要的key进去,如下面图所示,这是我加的两组:
技术分享

这两组key可以作为你将宿主程序的数据共享给扩展的主要主要和关键部分。

然后在选择扩展程序的Target,同样的操作,选择打开App groups,只是不同的是,这里的key不需要你再进行添加,而是进行勾选。

做完这些事情之后,基本数据共享的步骤就进行了一大半了,下来是具体的数据共享部分的代码部分的工作了。

通过App groups,可以用NSUserdefault和宿主程序进行小的数据共享,当然也可能是CoreData、sqlite或者其他的大数据的共享。

在用NSUserDefault做数据共享的时候,如果只是常规存储数据,读取数据如:

[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"xxx"];

[[NSUserDefaults standardUserDefaults] valueForKey:@"xxx"];

是无法正常在widget中读取到数据的。


所以,在初始化NSUserDefaults的时候,要这样做:

NSUserDefaults *userDefault=[[NSUserDefaults alloc] initWithSuiteName:k_APP_GROUP_KEY];

    [userDefault setValue:dic forKey:@""];

    [userDefault synchronize];

这样初始化,存储数据之后,然后再在扩展的ViewDidLoad中以同样的方式去初始化并读取数据,才能正常的根宿主程序的数据进行互通。Group_Key就是在添加App Group的时候,所填写的Key的名字。


好了,看到这里,就应该可以去完成一个由NSUserdefaults实现数据共享给扩展程序的操作了,可以试试看。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。