使用iOS 8应用程序组在两个应用程序之间共享数据(使用NSUserDefaults)

时间:2014-06-24 13:25:56

标签: ios objective-c swift ios8 ios-app-group

我想知道我们是否可以在具有新iOS 8功能的应用程序之间共享数据:应用程序组(使用NSUserDefaults) - 或者App Group是否仅在主应用程序及其扩展程序之间共享数据?

我实际上在两个应该共享数据的应用程序上启用了应用程序组功能(它们属于同一家公司)。它们也具有相同的App Groups(例如group.com.company.myApp)。

这是第一个代码(在Swift中)

    NSUserDefaults.standardUserDefaults().setBool(true, forKey:"Bool")
    NSUserDefaults.standardUserDefaults().synchronize()

这是第二个代码(在Objective-C中)

    NSUserDefaults *datas = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.company.myApp"];
    NSLog(@"%@", [datas boolForKey:@"Bool"]);

可悲的是,Bool总是返回nil。

如果有人有解决方案:)

由于

2 个答案:

答案 0 :(得分:10)

在Apple Developer论坛上查看此主题: https://devforums.apple.com/message/977151#977151

我相信两个实例都需要使用组ID(使用initWithSuiteName :)初始化,否则他们正在读/写不同的用户默认值集。

所以你的Swift代码会改为:

var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
userDefaults.setBool(true, forKey: "Bool")
userDefaults.synchronize()

答案 1 :(得分:1)

App Groups不再适用于WatchOS2。您必须使用监视连接框架。

在您的iOS应用中:

import UIKit
import WatchConnectivity

class ViewController: UIViewController, WCSessionDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    if (WCSession.isSupported()) {
        let session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }

    do {
        let applicationDict = ["key" : "value"]
        try WCSession.defaultSession().updateApplicationContext(applicationDict)
    } catch {
        // Handle errors here
    }
}

}

在您的Watch OS2 App中:

import WatchKit
import WatchConnectivity
import Foundation

class InterfaceController: WKInterfaceController, WCSessionDelegate {

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
    print(applicationContext)
}