我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构。
数据库:
我目前正在使用一个简单的领域结构,其中有一个对象 A 和一个可以容纳大量 A 的对象 B。
因此,在 iPhone 上,用户可以创建 B 并添加 A,当然还可以查看所有 A 和 B。
我希望 Apple Watch 显示当前 B 的所有 A,并让用户有机会在当前 B 中添加新的 A。
我尝试这样做的方式:
我想将 Hole Realm 文件从 iPhone 移动到手表或其他方式。 (这是网上的一个tips)
iPhone 代码:
override func viewDidLoad() {
super.viewDidLoad()
if WCSession.isSupported() { //makes sure it's not an iPad or iPod
let watchSession = WCSession.default()
watchSession.delegate = self
watchSession.activate()
transferRealmFile()
if watchSession.isWatchAppInstalled {
do {
try watchSession.updateApplicationContext(["foo": "bar"])
} catch let error as NSError {
print(error.description)
}
}
}
}
func transferRealmFile(){
if let path = Realm.Configuration().fileURL {
WCSession.default().transferFile(path, metadata: nil)
}
}
WatchKit 扩展:
func session(_ session: WCSession, didReceive file: WCSessionFile) {
//set the recieved file to default Realm file
var config = Realm.Configuration()
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentsDirectory = paths[0]
let realmURL = documentsDirectory.appendingPathComponent("data.realm")
if FileManager.default.fileExists(atPath: realmURL.path){
try! FileManager.default.removeItem(at: realmURL)
}
try! FileManager.default.copyItem(at: file.fileURL, to: realmURL)
config.fileURL = realmURL
Realm.Configuration.defaultConfiguration = config
}
然后我每次写入 Realm 时都会调用transferRealmFile()。这有效,但我无法解决这个问题:
问题:
- 如果只启动watchKit App,则不起作用。
- Apple Watch 与 iPhone 的工作方式不同。 (我想我需要更改 didRecived 代码,但我不知道是什么)
问题:
您知道谁来解决这两个问题,或者您是否知道更好的方法来处理这种情况,或者我们 iPhone 和 Watch 之间的交互方式会在 WatchOS 3 中发生变化吗?