iOS 9 App Search sendUserActivityToServer 失效后,什么都不做

iOS 9 App Search sendUserActivityToServer after it had been invalidated, so doing nothing

我想将我的笔记编入索引以进行全局搜索。我用了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
    }
}

但是我不知道怎么注册。 在我的视图控制器中,我尝试了:

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 在 activity 上被调用。

并且要警惕,因为Note在你的代码中是一个结构体,它有一个值语义,所以每次处理它都会被复制。