mapkit-ios-demo icon indicating copy to clipboard operation
mapkit-ios-demo copied to clipboard

YMKSearchSuggestSession не вызывает suggestHandler при запросе

Open AlexChanov opened this issue 2 years ago • 4 comments

IOS Swift. Реализовал все тоже самое что и в примере с гх у себе в проекте, но suggestHandler не вызывается. Причем с моим ключем в тестовом примере все работает, но в моем проекте не работает. Даже сам класс SuggestViewController перетащил чтобы убедится. Может нужно какую-то настройку включить в проекте?

import YandexMapsMobile

class SuggestViewController: UIViewController, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! @IBOutlet weak var searchBar: UITextField!

var suggestResults: [YMKSuggestItem] = []
let searchManager = YMKSearch.sharedInstance().createSearchManager(with: .combined)
var suggestSession: YMKSearchSuggestSession!

let BOUNDING_BOX = YMKBoundingBox(
    southWest: YMKPoint(latitude: 55.55, longitude: 37.42),
    northEast: YMKPoint(latitude: 55.95, longitude: 37.82))
let SUGGEST_OPTIONS = YMKSuggestOptions()

override func viewDidLoad() {
    super.viewDidLoad()
    suggestSession = searchManager.createSuggestSession()
    tableView.dataSource = self
}

func onSuggestResponse(_ items: [YMKSuggestItem]) {
    suggestResults = items
    tableView.reloadData()
}

func onSuggestError(_ error: Error) {
    let suggestError = (error as NSError).userInfo[YRTUnderlyingErrorKey] as! YRTError
    var errorMessage = "Unknown error"
    if suggestError.isKind(of: YRTNetworkError.self) {
        errorMessage = "Network error"
    } else if suggestError.isKind(of: YRTRemoteError.self) {
        errorMessage = "Remote server error"
    }
    
    let alert = UIAlertController(title: "Error", message: errorMessage, preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
    
    present(alert, animated: true, completion: nil)
}

@IBAction func queryChanged(_ sender: UITextField) {
    let suggestHandler = {(response: [YMKSuggestItem]?, error: Error?) -> Void in
        if let items = response {
            self.onSuggestResponse(items)
        } else {
            self.onSuggestError(error!)
        }
    }
    
    suggestSession.suggest(
        withText: sender.text!,
        window: BOUNDING_BOX,
        suggestOptions: SUGGEST_OPTIONS,
        responseHandler: suggestHandler)
}

func tableView(_ tableView: UITableView, cellForRowAt path: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "suggestCell", for: path) as! SuggestCell
    cell.itemName.text = suggestResults[path.row].displayText
    
    
    return cell
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return suggestResults.count
}

}

AlexChanov avatar Feb 14 '22 19:02 AlexChanov

В 4.1.0 тоже перестало работать. Вернее теперь вызывается если свернуть и развернуть приложение.

SuleymanovKamil avatar May 19 '22 10:05 SuleymanovKamil

У меня на 4.1.0 тоже очень схожая проблема, только с YMKSearchManager https://github.com/yandex/mapkit-ios-demo/issues/144

Kolch avatar May 19 '22 11:05 Kolch

Скорее всего мапкит создается не в application:didFinishLaunchingWithOptions, тогда нужно эксплицитно позвать onStart у объекта мапкита после создания. Например: YMKMapKit.setApiKey(...) YMKMapKit.sharedInstance().onStart()

imseleznev-yandex avatar May 19 '22 14:05 imseleznev-yandex

Скорее всего мапкит создается не в application:didFinishLaunchingWithOptions, тогда нужно эксплицитно позвать onStart у объекта мапкита после создания. Например: YMKMapKit.setApiKey(...) YMKMapKit.sharedInstance().onStart()

Благодарю!

netskyinc avatar Oct 12 '22 08:10 netskyinc