2016-11-02 3 views
-1

사실, TableView에 데이터를 설정해야하는데, 얻는 문자열은 WebService에서 POST 요청을하는 함수에 있습니다. 첫 번째 부분은 잘 작동TableView Swift 3의 값을 함수에 설정하십시오.

func request(){ 

    let parameters: Parameters = [ 
     "action": "*", 
     "key":"*": "*" 
    ] 
    Alamofire.request("my_url", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in 
     switch response.result { 
     case .success(let JSON): 
      print("Validation Successful") 
      print(response.result.value) 
      let response = JSON as! NSDictionary 
      let userId = response.object(forKey: "Data")! 
      let data = userId as! NSArray 
      for item in data { // loop through data items 
       let obj = item as! NSDictionary 
       print("Obj: \"\(obj["KeyName"] as! String)\"") 
       self.names.append(obj["KeyName"] as! String) 
      } 
      print(userId) 

     case .failure(let error): 
      print(error) 
     } 
    } 
} 

:

override func viewDidLoad() { 
    names.append("Data 1") 
    names.append("Data 2") 
    names.append("Data 3") 
    self.request() 
    MyTable.delegate = self 
    MyTable.dataSource = self 
    super.viewDidLoad() 
} 

self.request() 기능에 나는 잘 작동 POST 요청이

names.append("imac") 
names.append("Macbook") 
names.append("iphon") 

그리고 print("Obj: \"\(obj["KeyName"] as! String)\"") 콘솔 문자열에 저를 보여줍니다 만, TableView에서 self.names.append(obj["KeyName"] as! String)을 설정하면 첫 번째 부분 만 데이터가 표시되지 않습니다. 잘못된 것입니까?

+0

나는 비동기이기 때문에 그런 것 같아요. 그래서 새로운 이름을 얻으면'MyTable.reloadData()'를해야한다. 또한, 대문자 (예 : MyTable' =>'myTable')로 시작하는 var의 이름을 지정하지 마십시오. – Larme

+0

감사합니다. 안부입니다. –

답변

1

데이터를 데이터 소스로 업데이트 할 때마다 새 내용을 표시하려면 tableView를 다시로드해야합니다. for 루프가 테이블 재로드를 추가 한 후 tableView를 업데이트해야합니다. Alamofire 호출은 다른 스레드 (메인 스레드 제외)에서 비동기 적으로 실행되므로 메인 스레드에서 tableView를 업데이트하십시오. 당신의 예에서

DispatchQueue.main.async(execute: { 
    MyTable.reloadData() 
}) 

는 :

func request(){ 

    let parameters: Parameters = [ 
     "action": "*", 
     "key":"*": "*" 
    ] 
    Alamofire.request("my_url", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in 
     switch response.result { 
     case .success(let JSON): 
      print("Validation Successful") 
      print(response.result.value) 
      let response = JSON as! NSDictionary 
      let userId = response.object(forKey: "Data")! 
      let data = userId as! NSArray 
      for item in data { // loop through data items 
       let obj = item as! NSDictionary 
       print("Obj: \"\(obj["KeyName"] as! String)\"") 
       self.names.append(obj["KeyName"] as! String) 
      } 

      DispatchQueue.main.async(execute: { 
       MyTable.reloadData() 
      }) 

      print(userId) 

     case .failure(let error): 
      print(error) 
     } 
    } 
} 
+0

고마워, 나를 위해 일한다. –

+0

도움이 되니 기쁩니다. 답변으로 문제를 해결하는 데 도움이 되었다면 답을/upvote로 표시 할 수 있습니다. –

관련 문제