我正在尝试使用与iOS Contacts应用程序集成的消息传递应用程序,以便用户可以直接从"联系人"通过应用程序发起消息.这在WWDC 2016会议240中有所涉及,但显然省略了一些细节.
在WWDC示例之后,我有:
将活动类型添加到应用程序Info.plist
:
<key>NSUserActivityTypes</key>
<array>
<string>INSendMessageIntent</string>
</array>
Run Code Online (Sandbox Code Playgroud)实现application(_:continue:restorationHandler:)
我的应用程序委托.
创建并捐赠了一种互动
let activity = NSUserActivity(activityType: "com.example.message")
activity.title = "Send CB Test Message"
activity.expirationDate = Date.distantFuture
let recipient = INPerson( /* recipient with an email address in my Contacts database */ )
let sender = INPerson( /* me */ )
let intent = INSendMessageIntent(recipients: [recipient], content: nil, groupName: nil, serviceName: "CB Test Chat", sender: sender)
let response = INSendMessageIntentResponse(code: .success, userActivity: activity)
let interaction = …
Run Code Online (Sandbox Code Playgroud)我需要联系,更改它并存储回来.
CNContactStore().unifiedContacts
给我一个CNContact
实例,但CNSaveRequest().update
要求CNMutableContact
.
如何将CNContact转换为CNMutableContact?
我想修改从a 的属性CNPostalAddress
获得的a 的值。postalAddress
CLPlacemark
由于CNPostalAddress
具有不可变的属性,我想将其转换为CNMutablePostalAddress
. 然而,似乎没有一种干净的方法可以做到这一点。我目前的方法是这样的:
extension CNPostalAddress {
var mutableAddress: CNMutablePostalAddress {
let address = CNMutablePostalAddress()
address.city = city
address.country = country
address.postalCode = postalCode
address.state = state
address.street = street
[...]
return address
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来进行这种转换?