13

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

我实际上在应该在它们之间共享数据的两个应用程序上启用了应用程序组功能(它们属于同一家公司)。他们也有相同的应用程序组(如 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"]);

可悲的是,布尔总是返回零。

如果有人有解决方案:)

谢谢

4

2 回答 2

10

在 Apple 开发者论坛上查看此主题: 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()
于 2014-06-24T15:43:06.820 回答
1

应用组不再在 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 应用程序中:

import WatchKit
import WatchConnectivity
import Foundation

class InterfaceController: WKInterfaceController, WCSessionDelegate {

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
    print(applicationContext)
}
于 2015-11-27T07:46:23.443 回答