Разбился в попытке! realm.write - PullRequest
0 голосов
/ 15 апреля 2020

Мой проект потерпел крах в строке 16 RealmUtil.swift, коды показаны ниже. Значит ли это, что царство вернет ноль? Я был совершенно смущен. Надеюсь получить вашу помощь. Большое спасибо!

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

1 Ответ

0 голосов
/ 16 апреля 2020

Проблема в том, как обрабатываются дополнительные опции. Проблема здесь

let lts = HVMlts()!

, поскольку эта сила кода разворачивает возвращаемое значение, гарантируя, что HVMlts будет никогда не равным нулю.

Однако, если вы посмотрите на связанные функции, это может на самом деле return nil.

if results.count == 1 {
   return results[0]
} else {
   return nil
}

Если фильтр Realm

let results = realm.objects(HomeViewModel.self)...

возвращает два или более результатов, эта функция вернет nil. Точно так же, если бы не было результатов, он также возвратил бы nil

В любом случае, если nil вызовет ваш код, взломать sh.

Лучше всего безопасно развернуть опции или предоставить значения по умолчанию, используя оператор слияния ноль. Я вижу, вы сделали это в других частях вашего кода, но здесь есть еще два варианта.

if let lts = HVMlts() then {
    //do something with lts as it's not nil
}

или

guard let lts = HVMlts() else { return }
//do something with lts
...