objective-c - ios - 客户端在搜索时如何与后端交换数据?
怪我咯
怪我咯 2017-04-18 09:04:06
0
3
410

初学iOS,在做搜索功能的时候遇到了这个问题。
做的是一个商品类应用,在用户搜索商品时,目前打算把所有商品名一次性在初始化时获取,然后再搜索。但是如果商品数量很大,我觉得这样不现实。
请问一般搜索功能前后端数据是如何交互的呢?
有哪些思路?

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(3)
黄舟

Deux méthodes de mise en œuvre. S'il existe très peu d'entrées stables, vous pouvez les obtenir comme vous le faites pour réduire le trafic et accélérer la recherche.
Habituellement, le contenu de la recherche est transmis au backend et le backend renvoie les résultats de la recherche.

Ty80

Utilisez généralement HTTPRequest (NSURL, NSURLConnection, NSURLSession et autres méthodes intégrées au système, ou bibliothèques tierces telles que AFNetworking) pour envoyer une requête d'obtention ou de publication au serveur, qui contient les informations que vous souhaitez récupérer, telles que comme le type et la couleur du produit, le prix, etc., généralement sous forme JSON. Attendez ensuite que le serveur renvoie les résultats de la recherche, généralement au format JSON, puis affichez le contenu obtenu du serveur comme résultats.

大家讲道理

S'il s'agit de données de type énumération, les options sont limitées. Bien entendu, tout est placé sur le client puis récupéré.

S'il s'agit d'un produit, comme vous l'avez dit, et que la quantité est importante, alors il ne peut être mis sur le serveur pour récupération qu'une fois que l'utilisateur a saisi les mots-clés et cliqué sur la recherche, les mots-clés sont envoyés au serveur et. le serveur renvoie les résultats de la recherche. La liste s'affiche une fois que le client l'a reçue.

Il existe une autre méthode qui gaspille un peu plus de trafic, mais l'expérience utilisateur sera meilleure : pendant que l'utilisateur tape, les mots-clés sont envoyés au serveur pour récupération, et les résultats de la récupération sont affichés comme le contenu saisi par. l'utilisateur change, les résultats de la récupération changeront. Vous pouvez jeter un œil au framework ReactiveCocoa, qui contient quelques exemples :

laissez searchStrings = textField.rac_textSignal()
    .toSignalProducer()
    .map { texte dans texte sous forme de chaîne }
    .throttle (0.5, onScheduler : QueueScheduler.mainQueueScheduler)
    
laissez searchResults = searchStrings
    .flatMap(.Latest) { (requête : chaîne) -> SignalProducer<(NSData, NSURLResponse), NSError>
        laissez URLRequest = self.searchRequestWithEscapedQuery (query)

        retourner NSURLSession.sharedSession()
            .rac_dataWithRequest(URLRequest)
            .réessayer(2)
            .flatMapError { erreur dans
                print("Une erreur réseau s'est produite : \(erreur)")
                retourner SignalProducer.empty
            }
    }
    .map { (données, URLResponse) ->
        let string = String (données : données, encodage : NSUTF8StringEncoding) !
        retourner self.parseJSONResultsFromString(string)
    }
    .observerOn(UIScheduler())
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal