私はユーザー入力(8-10桁の数字)を取り込むアプリケーションを開発しています。これをphpスクリプトにPOSTしてデータベースに問い合わせ、結果を返しますJSON。可能な競合状態ですか?スウィフト2 iOSアプリはランダムにfunc tableViewを呼び出さない(tableView
私はJSONを解析し、配列に値を保存し、その後のtableViewにそれらの配列を読み込む。
をユーザが(NAVコントローラを介して)新しいビューにセグエを導入し、検索を、ヒット、 JSONデータがviewDidLoad()内のテーブルビューに送信されます。JSONを解析して配列に保存し、func tableViewで配列の値を行に読み込んだ後、セルを返します。
私の問題は、配列が常に塗りつぶされても、空のテーブルビューを取得した後、再度クリックして検索を試しても、データが行にロードされないことがあり、停止します。
私は、テーブルビュー用にデリゲートとデータソースをクリックしています。私はplistにHTTP例外を追加しました。
これは私の初めてのプロジェクトですので、どんなヒントもありがとうございます。私のコード配置が競合状態を引き起こす問題かもしれないと思われますか?私はviewDidLoad()関数でJSONを解析するので?
コード:
import UIKit
class ResultsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var ccnit = ""
var cunsArray : [String] = []
var accountsArray : [String] = []
var statusArray : [String] = []
var typesArray : [String] = []
var assignedArray : [String] = []
override func viewDidLoad() {
super.viewDidLoad()
//establish connection
let url = NSURL(string: "http:IPADDRESS/App/query.php")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"
request.HTTPBody = ccnit.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
//print("response = \(response)")
// let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)!
//print("responseString = \(responseString)")
//parse JSON
do {
let jsonArray = try (NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers)) as! NSArray
//loop through json array and take out strings
var counter = 0
while counter < jsonArray.count{
let cun = jsonArray[counter]["ticket_no"] as? String
self.cunsArray.append(cun!)
let account = jsonArray[counter]["accountname"] as? String
self.accountsArray.append(account!)
let status = jsonArray[counter]["status"] as? String
self.statusArray.append(status!)
let type = jsonArray[counter]["category"] as? String
self.typesArray.append(type!)
let assigned_to = jsonArray[counter]["assigned_to"] as? String
self.assignedArray.append(assigned_to!)
counter = counter + 1
}
if (self.cunsArray.count > 0)
{
print("cunsArray has \(self.cunsArray.count) items")
}
if (self.accountsArray.count > 0)
{
print("accountsArray has \(self.accountsArray.count) items")
}
print("Finished populating arrays")
self.tableView.delegate = self
self.tableView.dataSource = self
} catch let err {
print(err)
}
}
task.resume()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cunsArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
//print("*****inside tableview func")
print("returning cells")
// cell.account.text = ""
cell.cun.text = cunsArray[indexPath.row]
cell.account.text = accountsArray[indexPath.row]
cell.status.text = statusArray[indexPath.row]
cell.type.text = typesArray[indexPath.row]
cell.assigned_to.text = assignedArray[indexPath.row]
return cell
}
}
誰も助けることができないをロードした後にメインスレッドにreloadData()を呼び出す必要関連するコードを投稿しない場合は、コードを修正します。 – rmaddy
コードが追加されました。ありがとうございます。 – Sam