2016-06-14 3 views
0

У меня есть JSON response.bodyДинамическое отображение

{"0": 
     {"id":724, 
     "firstName":"Dr. Anna-Maria", 
     "lastName":"Boehler (Bohler)", 
     "city":"Luxembourg"}, 
    "1": 
     {"id":1542, 
     "firstName":"Joanna", 
     "lastName":"Kotlewska (Biever)", 
     "city":"Rodange"}, 
    "2": 
     {"id":1681, 
     "firstName":"Dr. Joanna", 
     "lastName":"Louwagie (Hoche)", 
     "city":"Luxembourg"}, 
    "3": 
     {"id":2161,"firstName":"Magdalena", 
     "lastName":"Sarrazin (Owsianna)", 
     "city":"Luxembourg"}, 
    "4": 
     {"id":10822,"firstName":"Anna", 
     "lastName":"Kogut-Aramini", 
     "city":"Diekirch"} 
    ,"uri":"search-by-name", 
    "paramsURL":{"country":"1","name":"Anna"}} 

в AppDelegate добавить RKObjectMapping и RKDynamicMapping

RKObjectMapping *showListDoctorMapping = [RKObjectMapping mappingForClass:[ShowListResultResponse class]]; 
    [showListDoctorMapping addAttributeMappingsFromDictionary:@{ 
                   @"id" : @"id", 
                   @"firstName" : @"firstName", 
                   @"lastName" : @"lastName", 
                   @"city" : @"city" 
                   }]; 
    RKDynamicMapping *dynamicMapping = [RKDynamicMapping new]; 
    [dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) { 

     NSDictionary *dict = representation; 
     NSArray *keys=[dict allKeys]; 
     RKObjectMapping *dataMapping =[RKObjectMapping mappingForClass:[ShowListResultResponse class]]; 
     for (NSString *key in keys){ 
      [dataMapping addRelationshipMappingWithSourceKeyPath:key mapping:showListDoctorMapping ]; 
     } 
     return dataMapping; 
    }]; 

ShowRensponse

и добавить ShowListResultResponse этот класс Mapping

import UIKit 
import Foundation 
class ShowListResultResponse: NSObject { 

var id: Int? 
var fristName: String? 
var lastName: String? 
var city: String? 

override init() { 
    super.init() 
} 

init(id: Int, fistName: String, lastName: String, city: String) { 
    self.id = id 
    self.fristName = fistName 
    self.lastName = lastName 
    self.city = city 
} 
} 

класса DoctorsDataSource

import UIKit 
class DoctorsDataSource: NSObject, MLPAutoCompleteTextFieldDataSource { 

var listDoctors=[String]() 
func autoCompleteTextField(textField: MLPAutoCompleteTextField!, possibleCompletionsForString string: String!, completionHandler handler: ([AnyObject]!) ->()) { 

    let appDelegate: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
    var requestParameters: [NSObject:AnyObject] = [NSObject: AnyObject]() 

    requestParameters["name"] = textField.text 
    requestParameters["country"]="1" 

    // Pobiera długość znaku textField 
    let lenght = textField.text!.characters.count 

    if lenght>3{ 
     let request = appDelegate.objectManager.requestWithObject(nil, method: .GET, path: "/search-by-name", parameters: requestParameters) 
     request.setValue("application/json", forHTTPHeaderField: "Accept") 
     let operation = appDelegate.objectManager.objectRequestOperationWithRequest(request, success: { (operation: RKObjectRequestOperation!, rkmap: RKMappingResult!) in 

      let list = rkmap.firstObject as AnyObject 
      if let doctors = list as? [ShowListResultResponse]{ 
       //if let doctors = rkmap.array() as? [ShowListResultResponse] { 
        for doctor: ShowListResultResponse in doctors { 
         self.listDoctors.append("\(doctor.fristName) \(doctor.lastName)") 
        } 
       } 

       handler(self.listDoctors); 
      }) { (operation: RKObjectRequestOperation!, error: NSError!) in 
       print("Load filed with error: @", error!) 
       self.performSelectorOnMainThread(#selector(AppDelegate.showFetchError), withObject: nil, waitUntilDone: true) 
      } 
      appDelegate.objectManager.enqueueObjectRequestOperation(operation) 
     // } 
    }} 
} 

Я не знаю, почему не показать список доктора

+0

Вы должны объяснить, что происходит с кодом, как далеко он работает, какие данные вы получаете? Предпочтительно также показывать только соответствующий код ... – Wain

ответ

0

, если я не знаком с этой третьей стороной Но

  1. у вас есть опечатка при использовании ПгвЬЫата (fristName и fistName)
  2. Ответ JSON - словарь с ключами (строка) и значением (словарь), и вы пытаетесь прочитать его как массив

    если разрешить врачам = список как? [ShowListResultResponse]

попытка прочитать его в качестве словаря

if let dict = list as? [String:ShowListResultResponse]{ 
    let doctors = Array(dict.values) 
} 

Вы также можете захотеть взглянуть на содержание rkmap

+0

Я использую библиотеку MLPAutoCompleteTextField этой библиотеки show autocomplete DoctorsDataSource - это класс, который получает данные с именем и фамилией Doctros при записи имени Doctor show result in autocomplete text –