Всегда получал неожиданно найденный ноль при развертывании необязательного значения внутри CallDirectoryHandler - PullRequest
0 голосов
/ 07 апреля 2020

Я добавил цель Call Directory Extension в приложение, создал группу, поместил туда основное приложение и расширение, поделился appname.xcdatamodeld с основным приложением и расширением и создал класс CoreDataHandler для доступа к CoreData с группой и appname.sqlite

Затем я сделал интерфейс в основном приложении, чтобы добавить телефонные номера и сохранить их в формате Int64. Работает нормально - номера сохранены. И я могу получить их внутри основного приложения, например:

let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "NumberList")

do {
    let entries = try managedContext.fetch(fetchRequest)
    for item in entries {
        print(item.value(forKeyPath: "number") as! Int64)
    }
}
catch {}

Все работает, напечатаны номера ... НО внутри CallDirectoryHandler с абсолютно такой же ситуацией, которую я всегда получал Fatal error: Unexpectedly found nil while unwrapping an Optional value, когда перезапускается расширение каталога вызовов.

Что я делаю не так? И на самом деле все это прекрасно работает ДО обновления до последней версии Xcode и IOS (13.4)

private func addOrRemoveIncrementalBlockingPhoneNumbers(to context: CXCallDirectoryExtensionContext, since date: Date) {
    print(numbers.count)                                      //<-- It shows numbers count properly!
    for entity in self.numbers {
        print(entity)                                         //<-- It shows entity! 
        let number: Int64? = entity.value(forKeyPath: "number") as? Int64
        print(entity.value(forKey: "number")!)               //<-- But fall here with nil, but attribute exists in main app!
        let isHidden: Bool? = (entity.value(forKeyPath: "is_hidden") as? Bool)!

        if isHidden != nil { context.addBlockingEntry(withNextSequentialPhoneNumber: number!) } else { context.removeBlockingEntry(withPhoneNumber: number!) }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...