【发布时间】:2023-12-19 20:53:02
【问题描述】:
尝试强制 Handoff 功能在配备 iOS 9 设备的 iPhone 5 和 iPad Air 上运行,但遇到了我认为与 iOS9 相关的问题 - 无法在 iOS 8 上检查,因为我没有配备此系统的设备。
问题:
- 创建用户活动时,我在主屏幕上打开第一台设备上的应用程序
- 在第二台设备上,我在锁定屏幕上看到有一些与我的应用相关的活动
- 我正在打开此应用程序,但未在此设备上调用
application:continueUserActivity:restorationHandler:,因此我无法向用户显示在第一台设备上显示的相同内容。
您可以在github上浏览整个项目:https://github.com/tomkowz/Quotes
实现细节:
我已经更新了目标的 plist 文件并添加了NSUserActivityTypes。
<key>NSUserActivityTypes</key>
<array>
<string>com.tomaszszulc.Quotes.quotesList</string>
<string>com.tomaszszulc.Quotes.browseQuote</string>
</array>
接下来我用这些声明的类型创建了枚举:
enum ActivityType: String {
case BrowseQuote = "com.tomaszszulc.Quotes.browseQuote"
case QuotesList = "com.tomaszszulc.Quotes.quotesList"
}
当用户在主屏幕上时,我开始NSUserActivity。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
quotes = Quote.findAll(CoreDataStack.sharedInstance().mainContext)
tableView.reloadData()
startUserActivity()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
userActivity?.invalidate()
}
func startUserActivity() {
let activity = NSUserActivity(activityType: ActivityType.QuotesList.rawValue)
activity.title = "Viewing Quotes List"
userActivity = activity
userActivity?.becomeCurrent()
}
当用户转到所选项目的详细信息时,会激活第二种活动。这是视图流:
UINavigationController -> (root) QuotesListViewController -> (push) QuoteDetailsViewController
这是QuoteDetailsViewController中创建用户活动的代码:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
userActivity = viewModel.userActivity // (viewModel) quote.userActivity
userActivity?.becomeCurrent()
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
userActivity?.invalidate()
}
viewModel.userActivity 调用:
extension Quote {
@available(iOS 8.0, *)
var userActivity: NSUserActivity {
let activity = NSUserActivity(activityType: ActivityType.BrowseQuote.rawValue)
activity.title = "Reading " + self.author + " quote"
activity.userInfo = [QuoteUserActivityKey.Identifier.rawValue: self.identifier]
// Core Spotlight support
if #available(iOS 9.0, *) {
activity.contentAttributeSet = self.searchableItemAttributeSet()
activity.keywords = Set([self.author])
activity.eligibleForSearch = true
activity.eligibleForHandoff = true
}
return activity
}
}
提前谢谢你!
【问题讨论】:
标签: swift swift2 ios9 handoff xcode7-beta3