gpt4 book ai didi

ios - 无法使用 WatchConnectivity (swift) 发送自定义对象

转载 作者:行者123 更新时间:2023-11-28 12:48:22 26 4
gpt4 key购买 nike

我试图将我的 swift 对象从 iOS 应用程序传递到 watch 。但是,我发现它适用于 NSString 等基本类型,但适用于我的自定义对象类型。

我的自定义对象能够转换为 NSData

我已经让我的对象实现了 NSObject 和 NSCoding,效果很好。我可以毫无问题地执行以下操作:

let encodedChordProgression = NSKeyedArchiver.archivedDataWithRootObject(chordProgressions[1])
let decodedChordProgression = NSKeyedUnarchiver.unarchiveObjectWithData(encodedChordProgression) as! ChordProgression
NSLog("get decodedChordProgression = \(decodedChordProgression.description)")

WatchConnectivity 代码适用于 NSString

在 iPhone 中:

try WatchSessionManager.sharedManager.updateApplicationContext(["data": "mystringishere"])

与 watch :

dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.dataSourceChangedDelegates.forEach { $0.dataSourceDidUpdate(applicationContext["data"] as! NSString)}
}

有效。

我的带有 WatchConnectivity 的自定义对象失败

但是,当我将对象切换到我自己的对象时,由于没有调用dataSourceChangedDelegates 回调函数而失败。即:

在 iPhone 中:

let encodedChordProgression = NSKeyedArchiver.archivedDataWithRootObject(chordProgressions[1])
try WatchSessionManager.sharedManager.updateApplicationContext(["data": encodedChordProgression])

与 watch :

dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.dataSourceChangedDelegates.forEach { $0.dataSourceDidUpdate(applicationContext["data"] as! NSData)}
}

func dataSourceDidUpdate(encodedChordProgression: NSData) {
let chordProgression = NSKeyedUnarchiver.unarchiveObjectWithData(encodedChordProgression) as! ChordProgression
NSLog("get something here: \(chordProgression.description)")
}

我尝试过的和我的问题

我已经尝试阅读 iPhone 应用程序和 Watch 应用程序的 system.log,但我找不到任何线索,这是我现在遇到的最大问题。

完整代码为:here ( checkout 7f2a72c6004f6580e2a38a2d7fd0ed2cef8a2b2e)

最佳答案

不幸的是,NSKeyedArchiver/NSKeyedUnarchiver 不会以这种方式工作。这是因为即使您可以在 watchkit 和 iOS 目标之间共享类文件,但它们对于编译器来说本质​​上是不同的类,因为它们是为不同的体系结构编译的。

为了解决这个问题,我自己做了什么(因为我最初尝试做同样的事情)是将我的自定义对象序列化为一个 json 字典(如果你愿意,也可以是 json NSData)并发送它。这是一个github project我已经为你自动将你的 swift 对象序列化为 json(特别是考虑到这个用例)。

关于ios - 无法使用 WatchConnectivity (swift) 发送自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com