#xcode #memory-leaks #swiftui #ios14 #swiftui-14.3-defect
#xcode #утечки памяти #swiftui #ios14 #swiftui-14.3- дефект
Вопрос:
Я получаю сообщение об ошибке памяти, когда пытаюсь получить доступ к клавиатуре в другом представлении, что не имеет ничего общего с выборкой контактов. Представление, в котором я нахожусь, позволяет обновлять информацию через TextField
, а в другом представлении Contact.swift
я получаю сбой.
В любом случае перед сбоем я получаю черный экран и вижу эти ошибки.
Вызывается обработчик прерываний [ServicesDaemonManager]. -[Подключение FontServicesDaemonManager]_block_invoke
Ошибка при подключении к службе XPC: ошибка домена = NSCocoaErrorDomain Code= 4097 «подключение к службе с именем pid 0
Вот код:
static func fetch(_ completion: @escaping(Result<[Contact], Error>) -> Void) {
let containerID = CNContactStore().defaultContainerIdentifier
let predicate = CNContact.predicateForContactsInContainer(withIdentifier: containerID())
let keysToFetch = [
CNContactImageDataKey,
CNContactImageDataAvailableKey,
CNContactThumbnailImageDataKey,
CNContactGivenNameKey,
CNContactFamilyNameKey,
CNContactPhoneNumbersKey,
CNContactEmailAddressesKey
] as [CNKeyDescriptor]
do {
let contacts = try CNContactStore().unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
completion(.success(contacts.map({ .init(contact: $0)})))
} catch {
completion(.failure(error))
}
}
Я специально зависаю на линии
let contacts = try CNContactStore().unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
с unifiedContacts
одним подчеркнутым как проблема. Теперь я даже не могу нажать на вкладку. Это либо полностью завершает работу Xcode, либо моего приложения.
Обновить
Итак, строка:
let contacts = try CNContactStore().unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
происходит сбой, но только когда я использую этот предикат
.predicateForContactsInContainer(withIdentifier: containerID())
Существуют различные предикаты, которые я могу использовать для ограничения выборки, например class func predicateForContacts(matchingName name: String) -> NSPredicate
.
Я полагаю, что проблема в том, что я извлекаю все контакты одновременно. Да, я делаю это в фоновом потоке, но, похоже, мое приложение не может обрабатывать одновременную выборку всех моих контактов так, как я это делаю.
НЕРАЗРЕШЕННЫЙ
Я до сих пор не решил эту проблему. Я использую инструменты и имею более 6000 утечек, которые, как я полагаю, происходят из-за выборки контактов. Кто-нибудь может описать, что это значит? Я знаю, что это цикл сохранения, но без чего-либо в стеке вызовов я понятия не имею, с чего начать, поэтому я в основном начинаю везде.
Конечно, трассировка стека отсутствует. Возможно, потребуется переархивировать приложение.
Комментарии:
1. Отлично работает с Xcode 12.1 / iOS 14.1. Какую среду вы использовали?
2. @Asperi Xcode 12.3 / iOS 14.3