iOS 9 App Search sendUserActivityToServer после того, как он был признан недействительным, поэтому ничего не делал

Я хочу проиндексировать свои заметки для глобального поиска. Я использовал этот учебник https://www.raywenderlich.com/116608/ios-9-app-search-tutorial-introduction-to-app-search

Я добавил строку в 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, вызванный действием EC1785C0-2904-4F0A-9885-F4DB91C4B245 после того, как он был признан недействительным, поэтому ничего не делал.

1 ответ

Решение

Я не работал с AppSearch. Но я думаю, это может быть связано с жизненным циклом объекта.

В размещенном вами коде нет ссылок на NSUserActivity объект, поэтому он освобождается сразу после выполнения тела цикла.

Я считаю, что объект должен сохраняться до resignCurrent называется по активности.

И быть бдительным, потому что Note это структура в вашем коде, и она имеет семантическое значение, поэтому она копируется каждый раз, когда вы с ней работаете.

Другие вопросы по тегам