将TodayExtension中的数据传递给app

时间:2016-05-27 04:44:14

标签: ios swift

是否可以将数据从today extension传递到应用? (即使它当前没有运行)。我希望将array个对象传递给主应用程序,并根据今天扩展中传递的对象实例化viewController。我知道如何从扩展程序中打开应用程序只是为了不太确定如何将数据发送到应用程序。

var arrayToBePassed: [MyDataSource]

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        var url = ""
        if currentSort == .recent{
            url = "ext://recent"
        }else{
            url = "ext://popular"            
        }
        //HOW DO I PASS arrayToBePassed to my app?
        let myAppUrl = NSURL(string: url)!
        extensionContext?.openURL(myAppUrl, completionHandler: { (success) in
            if (!success) {
            }else{

            }
        })
    }

2 个答案:

答案 0 :(得分:4)

您可以选择几条路线:

•在您的应用程序中,实现一个URL方案,该方案可以完全采用该对象数组,格式化为某种URL参数。例如myAwesomeApp://objectArray=[these, are, strings]。您必须自己解析该URL,这应该会有点乐趣。

•查看NSUserDefaults。您可以初始化您的应用和今天的扩展程序可以使用的“共享”用户默认对象,有关详细信息,请参阅here。然后,您可以将数组存储在此处,并在打开时从应用程序访问它。

这取决于你想要做什么,但从我得到的印象,我觉得第一个选项可能是最好的答案。我没有提供任何代码,只是概述了我将如何进行 - 但希望这应该足以让你有一个良好的开端。

答案 1 :(得分:0)

通过名为“App Groups”的新概念实现数据共享。允许应用程序组共享一些数据,包括文件,但值得注意的是,需要对文件访问进行编组以避免并发写入等等。这可以通过NSFileCoordination实现,但CoreData和NSUserDefaults可以解决这个问题。

您可以找到detial Steps here