質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

TableViewのCellを正しくViewControllerに接続する方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,506

Seraphim_9

score 17

何が起きているのか

TableViewを用いてCSVに格納したデータを表示し、タップするとラベルに別のデータを表示するプログラムを作成しています。CSVを読み込んだりデータを格納したりといったデータ関連のソースコードには一切エラーがありませんが、StoryBoardのコネクションの関連でこのようなエラーが出ます
出力されるビルドタイムエラーメッセージ

設定内容

他サイトで調べて、繋げるべきと言われた箇所をこのようにつなげています。
イメージ説明
イメージ説明
この接続を切るとエラーは出なくなる為ここが原因かと思われますが、そうすると一切データが表示されない為どうすれば良いか分からず困っています。ご教授のほどよろしくお願いします

当該ViewControllerのソースコード

//
//  yogo.swift
//  Senkyo
//
//  Created by student on 2018/11/01.
//  Copyright © 2018年 *****. All rights reserved.
//
import UIKit
import Foundation
class yogo: UIViewController, UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    @IBOutlet weak var UIView1: UIView!
    @IBOutlet weak var TableView: UITableView!
    @IBOutlet weak var Cell: UITableViewCell!
    var yougo : String = ""
    override func viewDidLoad() {
        super.viewDidLoad()
        //var data :[String]
        //data = [""]
        // Do any additional setup after loading the view, typically from a nib.
        let csvBundle = Bundle.main.path(forResource: "用語解説", ofType: "csv")
        //CSVデータ読み込み
        var n :Int
        n = 0
        do {
            var csvData: String = try String(contentsOfFile: csvBundle!, encoding: String.Encoding.shiftJIS)
            csvData = csvData.replacingOccurrences(of: "\r", with: "")
            let csvArray :[String] = csvData.components(separatedBy: "@")
            let _:AppDelegate = UIApplication.shared.delegate as! AppDelegate //Appdelegateのインスタンスを取得
            //data[n] = csvArray[n]
            Cell.textLabel!.text = csvArray[n]
            n = n + 1
            }catch let error {
                //ファイル読み込みエラー時
                print(error)
        }
    }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

回答が大きく変わるのでメインの部分を書き換えちゃいます。
まず、UITableViewCellをoutlet接続する必要ないのかなと思いいました。カスタムセルを作っているわけでもないようなのでデフォルトならばこのようなコードでテーブルビューを表現することができます。

class ViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    //ここをCSVから読み込んだデータに書き換えてください.
    let csvData = ["data1", "data2", "data3"]

    override func viewDidLoad() {
        tableView.delegate = self
        tableView.dataSource = self
        super.viewDidLoad()
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return csvData.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell.textLabel?.text = csvData[indexPath.row]
        return cell
    }
}

outlet接続しているのはStoryBoardに配置したUITableViewのみです。
イメージ説明

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/03 13:42

    そうしてみたところfuncをoverride funcにしたりすることで変更直後に発生していたエラーは消滅しましたが
    @IBOutlet weak var TableView: UITableView!にて
    Setter for 'TableView' with Objective-C selector 'setTableView:' conflicts with setter for 'tableView' from superclass 'UITableViewController' with the same Objective-C selector
    というエラーが出る上先ほど出ていたIllegal Configurationエラーは引き続き出たままです。

    キャンセル

  • 2018/12/04 00:40

    回答に修正入れました。StoryBoard普段あまり使わないので混乱していましたがシンプルなサンプルを作成してみたので読んでみてください。

    キャンセル

  • 2018/12/13 11:04

    データを取り込む手順を省き、stackoverflowで得たコードと合わせて
    harumi様のコードの通りviewdidload直下にdelegate設定を入れた結果エラーを消すことが出来ました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る