我想为我的笔记建立索引以进行全局搜索。我用了a tutorial by Ray Wenderlich .
我在 info.plist 中添加了字符串:
"myapp.com.notes.note"
这是我的对象:
struct Note {
public static let domainIdentifier = "myapp.com.notes.note"
public var userActivityUserInfo:[String: Any] {
return ["id": note_id]
}
public var userActivity: NSUserActivity {
let activity = NSUserActivity(activityType: Note.domainIdentifier)
activity.title = "\(note.title)"
activity.userInfo = userActivityUserInfo
activity.keywords = [note.title, note.text]
return activity
}
}
但是我不知道怎么注册。 在我的 View Controller 中,我尝试了:
override func viewDidLoad() {
super.viewDidLoad()
for note in self.notes {
note.userActivity.becomeCurrent()
}
}
但总是得到:
sendUserActivityToServer, called on activity EC1785C0-2904-4F0A-9885-F4DB91C4B245 after it had been invalidated, so doing nothing.
最佳答案
我没有使用过 AppSearch。但我的猜测是它可能与对象生命周期有关。
在您发布的代码中,没有对 NSUserActivity
对象的引用,因此它会在循环体执行后立即释放。
我认为该对象应该持续存在,直到 resignCurrent
在事件中被调用。
并且要警惕,因为Note
在你的代码中是一个结构体,它有一个值语义,所以每次处理它时都会复制它。
关于iOS 9 App Search sendUserActivityToServer 在它失效后,所以什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45472177/