我想知道我们是否可以在具有新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。
如果有人有解决方案:)
由于
答案 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)
}