2017-06-20 104 views
1

我想创建一个使用Swift的iOS应用程序,并且需要使用UISearchbar实现搜索功能。它接收一个商店名称并在数据库中搜索它以返回商店名称数组。下面是给我一些错误的代码段。我跟着这个网站密切http://swiftdeveloperblog.com/case-insensitive-search-with-swift-php-and-mysql/searchBar.resignFirstResponder()导致零值

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) 
{ 
    if(searchBar.text!.isEmpty) 
    { 
     return 
    } 


    doSearch(searchWord: searchBar.text!) 

} 
func doSearch(searchWord: String){ 

    mysearchBar.resignFirstResponder() 

    let myURL = NSURL(string: "http://localhost:8080/searchStore.php") 

    var request = URLRequest(url:myURL! as URL) 
    request.httpMethod = "POST" 

    let postString = "name=\(searchWord)" 
    request.httpBody = postString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request, completionHandler:{ (data: Data?, response: URLResponse!, error: Error!) -> Void in 

     DispatchQueue.main.async() { 

      if error != nil{ 
       self.displayAlertMessage(userMessage: error.localizedDescription) 
       return 
      } 
      do{ 
       var _: Error? 
       //STOPPED HERE AS OF NOW 
       let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 


       self.results.removeAll(keepingCapacity: false) 
       self.tableView.reloadData() 

       if let parseJSON = json{ 

        if let stores = parseJSON["stores"] as? [AnyObject]{ 

         for storeOjb in stores{ 
          let name = (storeOjb["name"] as! String) 
          self.results.append(name) 
         } 

         self.tableView.reloadData() 

        }else if(parseJSON["message"] != nil){ 

         let errorMessage = parseJSON["message"] as? String 
         if(errorMessage != nil){ 
          self.displayAlertMessage(userMessage: errorMessage!) 

         } 
        } 
       } 
      } catch { 
       print(error) 
      } 
     } 

    }) 

    task.resume() 
} 

我得到2个错误,第一个是由于mysearchBar.resignFirstResponder()。该应用程序终止,我不断收到

"fatal error: unexpectedly found nil while unwrapping an Optional value" 

第二个错误是,当我删除mysearchBar.resignFirstResponder()我得到

Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo= 
{NSDebugDescription=No value.} 

更新: 我输入这行固定第二个问题

request.addValue("application/json", forHTTPHeaderField: "Content-Type") 

但是,似乎我的postString变量正面临一个问题

breakpoint check photo

回答

0

您应该通过单击行号并运行该程序来为您提供错误的行上设置断点。使用左下方的调试器窗格窗口查找nil值。 debugger pane

这将帮助你找到什么值是零,如果你已经知道什么变量是零请告诉我们!

+0

看来mysearchBar是零。 –

+0

将func doSearch(searchWord:String)的另一个参数传递给func doSearch(searchWord:String,searchbar:UIsearchbar),然后在您的其他函数中搜索search searchbar(searchWord:searchBar.text!,searchbar:searchbar) – Mack

+0

您!这解决了第一个问题。但是,现在我面临着我的postString的另一个问题。 –