2

RubyMotionは初めてです。このコントローラーを使用すると:

class LectureController < UIViewController


    def viewDidLoad
        super

        self.view.backgroundColor = UIColor.whiteColor

        @lectures ||= []

        Lecture.get() do |success, lectures|
            if success
                @lectures = lectures
                p "Received #{@lectures.length} lectures"
                @table.reloadData
            else
                App.alert("OOPS!")
            end
        end


        @table = UITableView.alloc.initWithFrame(self.view.bounds)
        self.view.addSubview @table
        @table.dataSource = self


        def tableView(tableView, numberOfRowsInSection: section)
            @lectures.count
        end

        def tableView(tableView, cellForRowAtIndexPath: indexPath)
            @reuseIdentifier ||= "CELL_IDENTIFIER"

            cell = tableView.dequeueReusableCellWithIdentifier(@reuseIdentifier) || begin
                UITableViewCell.alloc.initWithStyle(UITableViewCellStyleDefault, reuseIdentifier: @reuseIdentifier)
            end

            cell.textLabel.text = @lectures[indexPath.row].name

            cell
        end


    end

    def initWithNibName(name, bundle: bundle)
        super
        self.title = "Lectures"
        self
    end

end

次のエラーメッセージが表示されます。

Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'UITableView dataSource must return a cell from
tableView:cellForRowAtIndexPath:'

私が見る限り、セルを返すcellForRowAtIndexPath必要があります。なぜうまくいかないのかわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

2

2 つのtableViewメソッドがメソッドの下にネストされていますviewDidLoad。それらは、メインLectureControllerクラスの一部になるように移動する必要があります。

典型的なRubyクラスでは、これを回避できるかもしれませんが(メソッドを呼び出すとviewDidLoad他のメソッドが動的に定義されます)、コードが変換/コンパイルされる方法が原因で、RubyMotionでは機能しません。

于 2013-01-12T23:03:43.823 に答える