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

使用iOS 8应用程序组在两个应用程序之间共享数据(使用NSUserDefaults),ios,objective-c,swift,ios8,ios-app-group,Ios,Objective C,Swift,Ios8,Ios App Group,我想知道我们是否可以使用新的iOS 8功能在应用程序之间共享数据:应用程序组(使用NSUserDefaults)——或者应用程序组是否只在主应用程序及其扩展程序之间共享数据 实际上,我在两个应用程序上都启用了应用程序组功能,这两个应用程序之间应该共享数据(它们属于同一家公司)。他们也有相同的应用程序组(比如group.com.company.myApp) 这是第一个密码(用Swift) 这是第二个的代码(在Objective-C中) 遗憾的是,布尔值总是返回零 如果有人有解决方案:) 谢谢在苹果

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

实际上,我在两个应用程序上都启用了应用程序组功能,这两个应用程序之间应该共享数据(它们属于同一家公司)。他们也有相同的应用程序组(比如group.com.company.myApp)

这是第一个密码(用Swift)

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

遗憾的是,布尔值总是返回零

如果有人有解决方案:)


谢谢

在苹果开发者论坛上查看此帖子:

我认为这两个实例都需要使用组ID(使用initWithSuiteName:初始化),否则它们将读取/写入不同的用户默认设置

因此,您的Swift代码将更改为:

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

应用程序组不再在WatchOS2中工作。您必须使用watch连接框架

在您的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)
}

嘿,伙计们,如果你们要投反对票,请说明原因。谢谢,iOS 8属于保密协议,所以我们不能在这里讨论。改用苹果开发论坛。@NealEhardt:“关于苹果在WWDC(苹果全球开发者大会)上披露的有关预发布苹果软件和服务的技术信息,您将不受上述保密条款的约束,除了您不能发布屏幕截图、撰写公众评论或重新分发任何预发布的Apple软件或服务,“您是否尝试使用inithtsuiteName初始化第一个用户默认值?”?我不相信他们是同一组人。另外,您确定您的组ID是正确的吗?我认为它不应该有应用程序的个人名称。@Btitus谢谢你纠正我。我认为iOS 7或更早版本的情况并非如此。我会尝试一下,但您知道如何在Swift(而不是StandardUserDefault)中设置SuitName吗?谢谢:)@FabienP只需使用适当的Swift代码进行更新这对我不起作用,任何解决方法!请帮忙。
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
    }
}

}
import WatchKit
import WatchConnectivity
import Foundation

class InterfaceController: WKInterfaceController, WCSessionDelegate {

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