Я добавил цель 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!) }
}
}