我試圖拒絕訪問某個視圖控制器,如果userDefault爲空,但代碼似乎不工作。爲了更清楚一點,我將一個收藏列表保存到userDefault。這是我的代碼:如何檢查userDefault是否爲空?
if UserDefaults.standard.array(forKey: "favorites") == nil {
navigationController?.popToRootViewController(animated: true)
return
}
誤差是指數超出範圍,這意味着整個塊被忽略(代碼塊運行後,因爲用戶默認爲空它試圖檢索信息時,崩潰是不在那裏)。
有趣的是,代碼第一次嘗試進入viewController(它拒絕我訪問)。但如果我最喜歡標記一個對象(保存到userDefault),然後取消收藏同一個對象(userDefault變爲空),並進入viewController,程序將崩潰。
我曾嘗試:
if let favExist = UserDefaults.standard.array(forKey: "favorites") {
print("")
print("FAV EXISTS")
print("")
}else {
print("")
print("NOPE")
print("")
navigationController?.popToRootViewController(animated: true)
return
}
...和相同的問題仍然存在。在print()中,日誌告訴我FAV EXISTS在我最喜歡的標記之後,然後是不喜歡的標記,然後嘗試訪問頁面(即使userDefault現在應該是空的)。
我也嘗試了其他線程的代碼。從另一個線程解決我的問題的建議代碼是:
let defaults = UserDefaults.standard
if (!defaults.bool(forKey: "favorites")) {
defaults.set(true, forKey: "favorites")
}
我真的不知道如何實現它,但?我在哪裏使用這個?它有什麼作用?
任何想法有什麼不對?
的可能的複製[如何檢查單的時間,如果UserDefaults是空的(https://stackoverflow.com/questions/38340958/how-to-check-a-single-time-if -userdefaults-is-empty) –
你是不是指'如果UserDefaults.standard.array(forKey:「favorites」)!= nil {'?如果根控制器需要以用戶默認值存儲的數組,則應該檢查它是否爲nil –
您還應該查看nil合併運算符並註冊默認值https://developer.apple.com/documentation/foundation/userdefaults/1417065-寄存器 –