使用 Core Data 解包 Optional 值时意外发现 nil
Posted
技术标签:
【中文标题】使用 Core Data 解包 Optional 值时意外发现 nil【英文标题】:Unexpectedly found nil while unwrapping an Optional value with Core Data 【发布时间】:2016-09-06 13:48:11 【问题描述】:所以我一直在为 Swift 3.0 更新我的代码,当应用程序打开时,我与 iCloud 同步并执行一个获取请求。
但是我得到以下可选错误
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.syncWithCompletion (completed) -> Void in
在appDelegate中执行如下函数
func syncWithCompletion(_ completion:@escaping (_ completed:Bool) -> Void)
if !ensemble.isLeeched
ensemble.leechPersistentStore error in
if error != nil
print("cannot leech \(error!.localizedDescription)")
completion(false)
else
print("leached!!")
completion(true)
else
ensemble.merge error in
if error != nil
print("cannot merge \(error!.localizedDescription)")
completion(false)
else
print("merged!!")
completion(true)
//NSNotificationCenter.defaultCenter().postNotificationName("Updated-DB", object: nil)
我不确定可选错误是什么,Xcode 在迁移时更新了函数头。
更新:
所以显然下面的值为 nil
但我不确定自 Swift 3 迁移以来导致此问题的原因
【问题讨论】:
在 xCode 中放置 all-exertions 断点,并告诉我们您的错误到底在哪里。 @PavelGatilov 我已经更新了问题,我将仔细检查迁移时还有哪些变化 但是,它到底在哪里崩溃了? 【参考方案1】:所以我发现错误是因为委托中的didFinishLaunchingWithOptions
函数。函数未正确迁移。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: Any]?) -> Bool
我创建了一个新项目并改用以下项目
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
它奏效了。这是因为未调用以下内容,因此未设置我的核心数据堆栈
self.setupCoreData()
【讨论】:
为什么不使用 Apple 模板中建议的(自动)惰性初始化核心数据堆栈?以上是关于使用 Core Data 解包 Optional 值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVAudioPlayer 解包 Optional 值时意外发现 nil
解包 Optional 时,pickerView 意外发现 nil
在 Swift 中对 Optional 值进行测试后解包时出错
AVCaptureDeviceInput在解包Optional值时意外发现nil