gpt4 book ai didi

swift - 函数不会返回 true 除非我在需要它之前调用它一次

转载 作者:行者123 更新时间:2023-11-28 11:27:15 25 4
gpt4 key购买 nike

我有一个名为 iCloudIsOn() 的函数,它通过将 UserDefaults 键的值与预定义键的值进行比较来检查用户是否已选择将 iCloud 与应用程序一起使用,然后我在我的初始 View Controller 上使用它来同步iCloud 并实现下拉刷新,但前提是用户正在使用 iCloud,否则不需要此代码。

但是奇怪的是,如果我在需要使用它之前调用它,即使只有一个 print(iCloudIsOn()),该函数也只会返回 true

函数本身看起来像这样:

func iCloudIsOn() -> Bool {    
if UserDefaults.standard.url(forKey: "UDDocumentsPath") == iCloudPath { return true }
else { return false }
}

然后在我初始vc的viewDidLoad下:

override func viewDidLoad() {
super.viewDidLoad()

if iCloudIsOn() {
// sync iCloud
}
}

但是这不会起作用,那时 iCloudIsOn() 将返回 false,除非我在 if iCloudIsOn() {//sync iCloud } 之前添加 print(iCloudIsOn())

我试着让 iCloudIsOn 在每次调用时打印 UserDefaults 键和 iCloudPath 的值,它们总是相同的:file:///private/var/mobile/Library/Mobile%20Documents/iCloud~cristian~茁壮成长存储/文档/

所以我的代码中没有任何东西在某个时候更改其中一个的值(该值在返回之前打印)。

知道为什么会这样吗?这与 UD 的工作方式有关,还是我遗漏了其他东西?我觉得有点奇怪,但我确定我只是在某个地方犯了错误。

提前致谢。

最佳答案

问题最终是 UserDefaults 在与原始 URL iCloudPath 进行比较时第一次存储了一个没有“/”的值,iCloudPath 具有原始“/”。

UserDefaults.standard.url(forKey: "UDDocumentsPath") = someURL

iCloudPath = someURL/

这只会在第一次复飞时发生。解决方法是同时覆盖这两个基础,因为您不知道自己在哪个基础上,尤其是当您在应用程序的一个 session 中进行多项检查时。

if UserDefaults.standard.url(forKey: "UDDocumentsPath") == iCloudPath || UserDefaults.standard.url(forKey: "UDDocumentsPath").appendPathComponent("/") == iCloudPath

不过,从技术上讲,这是一种奇怪且意外的行为。

关于swift - 函数不会返回 true 除非我在需要它之前调用它一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835223/

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