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

您的两个tableView方法嵌套在您的viewDidLoad方法下。他们应该被移出成为主要LectureController课程的一部分。

在典型的 Ruby 类中,您可能能够摆脱这种情况(调用该viewDidLoad方法动态定义其他方法),但由于代码转换/编译的方式,它在 RubyMotion 中不起作用。

于 2013-01-12T23:03:43.823 回答