gpt4 book ai didi

ios - 在模拟器中测试跨应用程序组的 NSUserDefaults 同步

转载 作者:行者123 更新时间:2023-11-30 12:48:51 25 4
gpt4 key购买 nike

我已为我的应用程序及其 iMessage 扩展启用应用程序组,以便我可以在两者之间共享数据。我已经在两个代码库中实现了 NSUserDefaults 同步。不过,我还没有找到测试同步的好方法。

在我的主应用程序的 ViewController 之一中,我添加了以下内容:

var defaults = NSUserDefaults(suiteName: "group.com.myAppGroup")
defaults?.setObject(movieTitles, forKey: "movieTitles")
defaults?.synchronize()
print("synchronizing movieTitles as \(movieTitles)")

在 iMessage 扩展中,我添加了以下内容:

var defaults = NSUserDefaults(suiteName: "group.com.myAppGroup")
defaults?.synchronize()

// Check for null value before setting
if let movieTitles = defaults!.stringForKey("movieTitles") {
print("synchronized movieTitles from \(movieTitles)")
}
else {
print("Cannot synchronize movieTitles")
}

当我在模拟器中运行应用程序时,我可以在控制台中看到同步正在进行。当我在模拟器中运行扩展时,我可以在控制台中看到它正在尝试同步(但失败了,因为应用程序没有运行,所以没有任何内容可以同步)。每当我尝试在模拟器中同时运行两个目标时,我都会遇到 iMessage 扩展崩溃的情况:

libsystem_kernel.dylib`mach_msg_trap:
0x109d2b380 <+0>: movq %rcx, %r10
0x109d2b383 <+3>: movl $0x100001f, %eax ; imm = 0x100001F
0x109d2b388 <+8>: syscall
-> 0x109d2b38a <+10>: retq
0x109d2b38b <+11>: nop

我在调试方面不够熟练,不知道这意味着什么。控制台也在最后一行显示 (lldb)

感谢任何帮助。我还能如何测试我的同步代码?

最佳答案

经过大量的尝试和错误并重新阅读其他教程后,我明白了。这个AppCoda tutorial最终成为我在开始工作之前读到的最后一本书。

在我的主应用程序中,我声明了一个全局变量:

var defaults = NSUserDefaults(suiteName: "group.com.myOrg.myApp")

然后,在(主应用程序的)我想要共享的值被更新的函数中,我使用了:

defaults?.setObject(movieTitles, forKey: "movieTitles")
defaults?.synchronize()

在扩展 View Controller 中,我再次声明了全局默认变量并在 viewDidLoad() 中使用了它:

if let extMovies = defaults.stringArrayForKey("extensionMovies") {
print("extMovies is \(extMovies)")
} else {
print("no extMovies to be found here")
}

为了进行测试,我首先运行应用扩展,然后运行主应用。切换回模拟器中的扩展有时会导致崩溃,但如果我重新运行该架构,我会看到我的共享变量打印到控制台。

关于ios - 在模拟器中测试跨应用程序组的 NSUserDefaults 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41267488/

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