首页 > 解决方案 > 在尝试中崩溃!领域.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

标签: realm

解决方案


问题是如何处理选项。问题在这里

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

推荐阅读