- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 UNNotificationServiceExtension 将通知中的电话号码替换为姓名。我正在尝试在 CNContactStore 中查找电话号码,并将 Ph# 替换为联系人姓名。
我的问题是,当我调用 CNContactStore enumerateContacts(with:keysToFetch: ) 时,扩展程序将退出,而不会从 enumerateContacts 调用中返回。
另一方面,如果我调用 CNContactStore 的 unifiedContacts(matching: predicate, keysToFetch: keys) ,它会按预期返回。但不幸的是,此调用找不到电话号码。我发现查找电话号码的唯一方法是调用 enumerateContacts。
我使用相同的代码在我的应用程序中查找电话号码,效果很好。我还可以替换通知扩展中的文本,而不会出现问题。仅当我尝试在扩展内调用 enumerateContacts 时,才会出现此问题。
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
let searchPhoneNumber = "5555551234"
let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey] as [CNKeyDescriptor]
let contactsStore = CNContactStore()
do {
try contactsStore.enumerateContacts(with: CNContactFetchRequest(keysToFetch: keys)) {
(contact, error) -> Void in
print("We never get here!!!")
if (!contact.phoneNumbers.isEmpty) {
for phoneNumber in contact.phoneNumbers {
if phoneNumber.value.stringValue == searchPhoneNumber {
// swap number for name
self.bestAttemptContent?.body = contact.givenName
contentHandler(self.bestAttemptContent!)
return
}
}
}
}
}
catch {
print("And we never get here.")
contentHandler(bestAttemptContent!)
return
}
contentHandler(bestAttemptContent!)
}
最佳答案
来自 UNNotificationServiceExtension https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension
That method has a limited amount of time to perform its task and execute the provided completion block. If your method does not finish in time, the system calls the serviceExtensionTimeWillExpire() method to give you one last chance to submit your changes. If you don't update the notification content before time expires, the system displays the original content.
我猜想循环访问联系人超出了为该方法完成分配的时间。
关于swift - UNNotificationServiceExtension 退出调用 CNContactStore enumerateContacts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742192/
我正在尝试获取CNContact。但问题是 CNContactStore.CNContactStore.authorizationStatusForEntityType 任何时候都不是.Authori
我正在尝试插入var 联系人:[CNContact] = []var store = CNContactStore() 但我没有找到适合这项工作的代码,我找到了这个函数,我需要为其命名 func fi
我正在用 Swift 构建一个应用程序。我想使用 phoneNumber(作为字符串)创建谓词,并从 CNContactStore 中检索该联系人的姓名(如果存在)。我可以通过以下方式很容易地创建名称
我正在研究如何使用联系人框架,但是创建联系人的一些相当简单的代码失败并出现意外结果。这是我的代码: let Store = CNContactStore() Store.request
CNContactStore 的 executeSaveRequest(_:) 方法根据文档抛出错误。 我试图在 do/catch 中捕获此错误,但我无法弄清楚我需要捕获什么错误。 do{ try
我需要获取用户设备上所有联系人的数量。 ABAddressBookGetPersonCount 上的弃用消息说: use count of fetch results for CNContactFet
我正在尝试插入 var 联系人:[CNContact] = []var store = CNContactStore() 但我没有找到适合这项工作的代码,我发现这个函数需要给它起个名字 func fi
我尝试使用 CNContactStore 函数 requestAccessForEntityType 获得使用地址簿的授权,但收到一个我不明白的错误。 该函数在类中定义为: public func r
我正在编写一个程序,允许用户使用 CNContactPickerViewController 选择联系人。如果所选联系人 NOT 没有关联的电话号码,我想让它弹出一个错误,并在他们点击确定时返回到 C
你真的可以在 Siri 扩展中访问联系人数据库吗? 我正在尝试制作一个 INSendPaymentIntent 扩展,用户可以在其中指定他要向其汇款的人。这在模拟器(Xcode 8.3.2,iOS 1
我想使用联系人框架 (IOS 9) 来检索与电子邮件地址匹配的联系人。 任何帮助将不胜感激。请使用 Objective-C 。谢谢。 最佳答案 添加 Contacts.framework #impor
我想以编程方式在我的应用程序中创建联系人,并使用苹果联系人框架将其保存到实际联系人中。我可以创建一个包含名字、姓氏甚至日期的模板。 我从开始 let contact = CNMutableContac
似乎无法从 CNContactStore 获取组。 CNContactStore 使用需要组标识符来获取组的谓词。 CNContact 没有任何方法可以找出它所在的组(我可以找到)。 文档中是否缺少某
我正在使用 UNNotificationServiceExtension 将通知中的电话号码替换为姓名。我正在尝试在 CNContactStore 中查找电话号码,并将 Ph# 替换为联系人姓名。 我
这是我获取设备的联系人并保存到 MutableArray 的代码。 但我需要单独获取所有联系人的 recordID 并保存到同一个数组中以供进一步使用。 (例如,使用 recordId 删除联系人)。
我正在尝试删除我的应用程序的 URL 冗余。如果单个联系人有多个 URL,这很有效。但是如果有链接的联系人,通常保存操作会失败并显示消息 “操作无法完成。(CNErrorDomain 错误 2。)”
我正在构建一个 UI 来请求访问 CNContactStore 并处理用户之前(并且可能错误地)拒绝访问的情况。当我检测到当前状态为 .denied 时,我会显示一个 UIAlertControlle
尝试保存已填充社交资料数据的联系人时遇到以下错误:这在 iOS 9.2 中出现 Domain=CNErrorDomain,Code=500 "(null)" UserInfo={CNKeyPaths=
我正在寻找一种方法来获取与联系人容器 ( CNGroup ) 相关的组列表 ( CNContainer )。当我使用 predicate它失败。 我使用的代码是 func populateGroups
目前我正在使用这段代码从 iPhone 中获取联系人 CNContactStore *store = [[CNContactStore alloc] init]; [store reques
我是一名优秀的程序员,十分优秀!