realm - 在尝试中崩溃!领域.write
问题描述
我的项目在 RealmUtil.swift 第 16 行崩溃,代码如下所示。这是否意味着领域返回零?我很困惑。希望能得到您的帮助。太谢谢了!
RealmUtil.swift
15 let realm = try! Realm()
16 try! realm.write {
17 write()
18 }
详细日志如下。它显示在 firebase 中,我无法在调试模式下调试它。
Crashed: com.apple.main-thread
0 libsystem_kernel.dylib 0x1978b5ec4 __pthread_kill + 8
1 libsystem_pthread.dylib 0x1977d5724 pthread_kill$VARIANT$armv81 + 216
2 libsystem_c.dylib 0x197725844 abort + 100
3 Realm 0x1041bfe30 please_report_this_error_to_help_at_realm_dot_io + 10
4 Realm 0x1041c00fc realm::util::terminate_internal(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) + 264
5 Realm 0x1041c0270 realm::util::terminate(char const*, char const*, long, std::initializer_list<realm::util::Printable>&&) + 324
6 Realm 0x103eed0f4 realm::_impl::RealmCoordinator::advance_schema_cache(unsigned long long, unsigned long long) + 182
7 Realm 0x103fc0c2c realm::Realm::cache_new_schema() + 100
8 Realm 0x103fc1510 realm::Realm::begin_transaction() + 176
9 Realm 0x103f900e0 -[RLMRealm beginWriteTransaction] + 20
10 RealmSwift 0x10477004c $s10RealmSwift0A0V5write16withoutNotifying_xSaySo20RLMNotificationTokenCG_xyKXEtKlF + 136
11 Ig Followers 0x102da91c8 specialized static HomeViewModel.engagementAnalysis(media:) + 16 (RealmUtil.swift:16)
12 Ig Followers 0x102da9408 specialized static HomeViewModel.analysisLTS() + 4301886472 (<compiler-generated>:4301886472)
13 Ig Followers 0x102c84b2c closure #1 in closure #1 in HomeVC.getLTSData() + 4300688172 (<compiler-generated>:4300688172)
14 Ig Followers 0x102dab644 partial apply for closure #1 in closure #1 in static HomeViewModel.getLTSData2(pk:completeHandler:) + 4301895236 (<compiler-generated>:4301895236)
15 Ig Followers 0x102c9f454 thunk for @escaping @callee_guaranteed () -> () + 4300797012 (<compiler-generated>:4300797012)
添加了有关此问题的详细功能的图像。 crashed_function_image_click_to_see
解决方案
问题是如何处理选项。问题在这里
let lts = HVMlts()!
因为该代码强制解包返回值,保证 HVMlts永远不会为零。
但是,如果您查看相关的功能,它实际上可以return nil
.
if results.count == 1 {
return results[0]
} else {
return nil
}
如果领域过滤器
let results = realm.objects(HomeViewModel.self)...
返回两个或更多结果,则该函数将返回 nil。同样,如果没有结果,那么它也会返回 nil
无论哪种情况, nil 都会导致您的代码崩溃。
最好使用 nil 合并运算符安全地展开选项或提供默认值。我看到您在代码的其他部分已经这样做了,但这里还有两个选项。
if let lts = HVMlts() then {
//do something with lts as it's not nil
}
或者
guard let lts = HVMlts() else { return }
//do something with lts