【问题标题】:Share datas between two apps with iOS 8 App Groups (using NSUserDefaults)使用 iOS 8 应用组在两个应用之间共享数据(使用 NSUserDefaults)
【发布时间】:2014-08-14 18:55:50
【问题描述】:

我想知道我们是否可以使用新的 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"]);

遗憾的是,Bool 总是返回 nil。

如果有人有解决方案:)

谢谢

【问题讨论】:

  • 大家好 - 如果您要投反对票,请说明原因。谢谢
  • iOS 8 处于保密协议下,所以我们不能在这里谈论它。请改用 Apple 开发者论坛。
  • @NealEhardt:“对于 Apple 在 WWDC(Apple 全球开发者大会)上披露的有关预发布 Apple 软件和服务的技术信息,您将不受上述保密条款的约束,除非您不得发布屏幕截图、撰写公开评论或重新分发任何预发布的 Apple 软件或服务”
  • 您是否尝试过使用 initWithSuiteName 初始化您的第一个用户默认值?我不相信他们是同一组。另外,您确定您的组 ID 正确吗?我认为它不应该有应用程序的个人名称。
  • @bjtitus 感谢您的纠正。我认为 iOS 7 或更早版本并非如此。

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


【解决方案1】:

在 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()

【讨论】:

  • 我会试试的,但你知道我如何在 Swift 中设置 SuitName(而不是 standardUserDefaults)吗?谢谢:)
  • @FabienP 只需使用适当的 Swift 代码进行更新
  • 这对我不起作用,任何解决方法!请帮忙。
【解决方案2】:

应用组不再在 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多