2016-09-16 2 views
0

나는 UITableViewController을 가지고 있으며, 검색 막대를 헤더보기로 추가했습니다. 검색 막대의 텍스트가 변경되었지만 작동하지 않는 경우 테이블보기 데이터를 다시로드하려고합니다.검색 결과를 UITableView에 표시하기

여기 내 textDidChange 방법입니다. 컨텍스트의 경우 jsonArray[[String: AnyObject]]이며 다른보기 컨트롤러에서 전달됩니다. 그런 다음 searchResults 배열은 jsonArray에서 viewDidLoad()으로 설정되고 테이블보기는 searchResults를 데이터 소스로 사용합니다.

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
     if searchText.characters.count == 0 { 
      searchResults?.removeAll() 
      searchResults = jsonArray! 
     } else { 
      searchResults?.removeAll() 
      for market in jsonArray! { 
       let titleRange = market["name"]?.range(of: searchText, options: .caseInsensitive) 

       var address = String() 
       var city = String() 
       var state = String() 
       var zip = Int() 

       if let address1 = market["address1"] as? String { 
        address = address1 
       } 

       if let city1 = market["city"] as? String { 
        city = city1 
       } 

       if let state1 = market["state"] as? String { 
        state = state1 
       } 

       if let zip1 = market["zip"] as? Int { 
        zip = zip1 
       } 

       let zipCode = String(describing: zip) 
       let addressString = String("\(address) " + "\(city), " + "\(state) " + "\(zipCode)") 
       let addressRange = addressString?.range(of: searchText, options: .caseInsensitive) 

       if titleRange != nil { 
        searchResults?.append(market) 
       } else if addressRange != nil { 
        searchResults?.append(market) 
       } 
      } 
     } 

     tableView.reloadData() 
    } 

나는 루프에 대한 후 다른 문의 끝에이 인쇄 문을 추가했고 내 범위가 제대로 작동하지 않는 것 같습니다 있도록 배열이 원래 포함 된 모든 개체가 포함되어 있는지 보여주는 것 .

print("search array: \(searchResults?.count)") 

답변

-1

당신의 SearchResult를 호출 할 필요가 있습니까? .removeAll() 함수를 대신 사용이

searchResults = NSMutableArray.init() 

으로 .Append (시장) 대신에게

searchResults.addObject(market) 
를 사용?의 SearchResult를 사용하지 마십시오을
+0

NSArray가 아닌 Swift 배열을 사용하고 있습니다. – raginggoat

+0

ok 그것에 대해 srrry –

0

Swift에서 Range 대신 NSRange를 사용하여이 문제를 해결했습니다.

let titleNSRange: NSRange = (market["name"]?.range(of: searchText, options: .caseInsensitive))! 
let addressNSRange: NSRange = (addressNSString.range(of: searchText, options: .caseInsensitive)) 

if titleNSRange.location != NSNotFound || addressNSRange.location != NSNotFound { 
        searchResults?.append(market) 
       } 
관련 문제