2017-11-23 5 views
0

私はiOSの検索結果のテーブルビューを作成しています。TableViewに@IBAction関数データを取得するには?

これは私のViewControllerです:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var resultArray = NSMutableArray() 
@IBOutlet weak var scoreTableView: UITableView! 
@IBOutlet weak var inputText: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

override func viewWillAppear(_ animated: Bool) { 
    scoreTableView.reloadData() 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return resultArray.count 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    XXXXXXX 
    return cell 
} 

そして、これは私の検索と@IBActionのFUNCです。

func search() -> NSMutableArray{ 
    XXXXXXXXX 
    return array 
} 

@IBAction func btnSearch(_ sender: Any) { 
    resultArray = search() 
} 

ただし、ビルド後、テーブルビューは空白です。 debugDescription()では、func search()がうまく動作し、検索ログを出力していることがわかります。

tableviewのresultArrayは@IBActionのものではありません。それはemptyです。

+0

初心者の方でも、Swiftの「NSMutable ...」コレクションタイプを示唆するチュートリアルに従わないでください。あなたは強いタイプのシステムと戦っている。 'resultArray'をネイティブSwiftの' Array'として宣言します。例えば、 'var resultArray = [String}()'のようにできるだけ具体的に宣言してください。 – vadian

+0

PS: 'search()'関数は非同期タスクを実行しますか?はいの場合は戻り値を使用できません。 – vadian

+0

tableViewsの動作が正しいです。あなたのコードによると、結果配列は常に空であり、必要ではないviewWillAppearでtableViewをリロードするだけです。検索方法にコードを入力してください。 – OverD

答えて

0

resultArrayを変更した後でデータを再読み込みする必要があります。

@IBAction func btnSearch(_ sender: Any) { 
    resultArray = search() 
    scoreTableView.reloadData() 
} 
+0

リロードデータが機能しませんでした。そして残念ながら、func search()のresultArrayは、別のinputTextを入力しても変更されませんでした。これは、debugDescription()の最初のものを示したばかりです。 –

+0

関数btnSearchでブレークポイントを使用して、このメソッドが呼び出されているかどうかを調べます。そうでない場合は、ボタンに再度接続してください。 – Peracek

+0

あなたの寛大なアドバイスをありがとう。私は、DataSourceとDelegateの割り当てをtableViewに追加することで修正しました。恥ずかしい....... –

0

更新:DataSourceとDelegateをtableViewに割り当てるのを忘れてしまった。私はストーリーボードから手動でtableviewを構築しました。

私がストーリーボードで行った場合、DataSourceとDelegateを割り当てる必要があると誤解しました。

override func viewDidLoad() { 
    super.viewDidLoad() 
    scoreTableView.dataSource = self 
    scoreTableView.delegate = self 
関連する問題