0

RubyMotion を使用した iOS 開発の学習を始めたばかりで、このチュートリアルを行っています。理解するのはかなり簡単に思えますが、現在、rakeコマンドを実行すると次のエラーが発生します。

ColorController.rb:7:in `initWithColor:': undefined method `initWithNibName' for #<ColorController:0x9b4f470> (NoMethodError)
    from SearchController.rb:46:in `open_color:'
    from Color.rb:35:in `block in find:'
    from query.rb:358:in `call_delegator_with_response'
    from query.rb:128:in `connectionDidFinishLoading:'

WHEW WELL THAT IS A TON OF CODE NOW ISN'T IT.チュートリアルページの の部分にたどり着き、そこで立ち往生しています。現在、私のコードは次のようになります。

# app_delegate.rb
class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)

    @search_controller = SearchController.alloc.initWithNibName(nil, bundle: nil)
    @navigation_controller = UINavigationController.alloc.initWithRootViewController(@search_controller)

    @window.rootViewController = @navigation_controller
    @window.makeKeyAndVisible
    true
  end
end

# ColorController.rb
class ColorController < UIViewController
  attr_accessor :color
  def initWithColor(color)
    initWithNibName(nil, bunlde: nil)
    self.color = color
    self
  end
  def viewDidLoad
    super
    self.title = self.color.hex

    @info_container = UIView.alloc.initWithFrame [[0, 0], [self.view.frame.size.width, 110]]
    @info_container.backgroundColor = UIColor.lightGrayColor

    self.view.addSubview @info_container

    @color_view = UIView.alloc.initWithFrame [[10, 10], [90, 90]]
    @color_view.backgroundColor = String.new(self.color.hex).to_color

    self.view.addSubview @color_view

    @color_label = UILabel.alloc.initWithFrame [[110, 30], [0, 0]]
    @color_label.text = self.color.hex
    @color_label.sizeToFit

    self.view.addSubview @color_label

    @text_field = UITextField.alloc.initWithFrame [[110, 60], [100, 26]]
    @text_field.placeholder = "tag"
    @text_field.textAlignment = UITextAlignmentLeft
    @text_field.autocapitalizationType = UITextAutocapitalizationTypeNone
    @text_field.borderStyle = UITextBorderStyleRoundedRect

    self.view.addSubview @text_field

    @add_button = UIButton.buttonWithType(UIButtonTypeRoundedRect)
    @add_button.setTitle("Add", forState: UIControlStateNormal)
    @add_button.setTitle("Adding", forState: UIControlStateDisabled)
    @add_button.setTitleColor(UIColor.lightGrayColor, forState: UIControlStateDisabled)
    @add_button.sizeToFit
    @add_button.frame = [[@text_field.frame.origin.x + @text_field.frame.size.width + 10, @text_field.frame.origin.y], @add_button.frame.size]

    self.view.addSubview(@add_button)

    table_frame = [[0, @info_container.frame.size.height], [self.view.bounds.size.width, self.view.bounds.size.height - @info_container.frame.size.height - self.navigationController.navigationBar.frame.size.height]]
    @table_view = UITableView.alloc.initWithFrame(table_frame, style: UITableViewStylePlain)

    self.view.addSubview(@table_view)

  end
end

# SearchController.rb
class SearchController < UIViewController
def viewDidLoad
  super
  self.title = "Search"
  self.view.backgroundColor = UIColor.whiteColor

  @text_field = UITextField.alloc.initWithFrame [[10, 10], [self.view.frame.size.width - 20, 30]]
  @text_field.placeholder = "#abcabc"
  @text_field.textAlignment = UITextAlignmentLeft
  @text_field.autocapitalizationType = UITextAutocapitalizationTypeNone
  @text_field.borderStyle = UITextBorderStyleRoundedRect
  @text_field.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2 - 100)

  self.view.addSubview @text_field

  @search_button = UIButton.buttonWithType(UIButtonTypeRoundedRect)
  @search_button.setTitle("Search", forState: UIControlStateNormal)
  @search_button.setTitle("Loading", forState: UIControlStateDisabled)
  @search_button.sizeToFit
  @search_button.center = CGPointMake(self.view.frame.size.width / 2, @text_field.center.y + 40)

  self.view.addSubview @search_button

  @search_button.when(UIControlEventTouchUpInside) do
    @search_button.enabled = false
    @text_field.enabled = false

    hex = @text_field.text
    hex = hex[1..-1] if hex[0] == "#"

    Color.find(hex) do |color|
      if color.nil?
        @search_button.setTitle("None :(", forState: UIControlStateNormal)
      else
        @search_button.setTitle("Search", forState: UIControlStateNormal)
        self.open_color(color)
      end
      @search_button.enabled = true
      @text_field.enabled = true
    end

  end

end
def open_color(color)
  self.navigationController.pushViewController(ColorController.alloc.initWithColor(color), animated: true)
end
end

他に 2 つのモデルがありますが、コードを実行しない限り関係ないと確信しています。

誰が私に何をすべきか教えてもらえますか? クラスで定義されていないメソッドを呼び出そうとしていることに気付きinitWithNibNameましたが、それがチュートリアルで行われていることなので、正しいと思いました。ColorControllerクラスで定義する必要がありますか? または、他の方法で呼び出すことができますか?

4

1 に答える 1

1

bundle のスペルが間違っています。

変化する:

initWithNibName(nil, bunlde: nil)

に:

initWithNibName(nil, bundle: nil)
于 2013-10-06T15:19:51.137 に答える