2013-12-24 19 views
1

我正在使用ProMotion,Teacup和MMDrawerController的組合。當我加載應用程序時,一切工作正常,但是當我嘗試從一個屏幕更改爲另一個時,由於超視圖爲零,所以我得到了茶杯的錯誤。茶杯錯誤是: *** Terminating app due to uncaught exception 'NoMethodError', reason: 'calculations.rb:15:in calculate:': undefined method 'bounds' for nil:NilClass (NoMethodError)。這是因爲view.superview爲null而引發的。RubyMotion:打開新屏幕後丟失超級視圖

我是一個初學者,但感覺就像茶杯錯誤只是一個更大的問題的症狀,我已經設置了一切,或者可能與MMDrawerController不兼容。

所以,應用程序加載,進入WeekScreen,在WeekScreen上,我添加一個帶有按鈕的導航欄以返回到WeekScreen。當我點擊那個按鈕時,我得到錯誤。 (我在這裏簡單的代碼 - 我真的沒有一個按鈕一個頁面應用程序返回到同一屏幕)

屏幕/ root_screen.rb

class RootScreen < MMDrawerController 
    include PM::ScreenModule 

    title 'Schedule' 

    def self.new(args = {}) 
    alloc.init.tap do |root_screen| 
     root_screen.on_create(args) 
    end 
    end 

    def centerViewController=(centerViewController) 
    super 
    self.title = centerViewController.title 
    end 

    def on_create(args={}) 
    super 

    self.leftDrawerViewController = Screen::MenuScreen.new(nav_bar: false) 
    self.rightDrawerViewController = nil 
    self.centerViewController = week_screen 

    leftDrawerButton = MMDrawerBarButtonItem.alloc.initWithTarget self, action:"show_menu:" 
    navigationItem.setLeftBarButtonItem leftDrawerButton, animated:true 
    end 

    def will_appear 
    self.title = centerViewController.title 
    end 

    def show_menu(sender) 
    toggleDrawerSide MMDrawerSideLeft, animated:true, completion: nil 
    end 

    def week_screen 
    @week_screen ||= Screen::WeekScreen.new 
    end 
end 

屏幕/ week_screen.rb

module Screen 
    class WeekScreen < PM::Screen 

    title '' 
    stylesheet :week_styles 
    include Teacup::TableViewDelegate 

    @@cell_identifier = nil 
    @selected_date = nil 

    def will_appear 
     super 

     # mm_drawerController.title = title 
     view.subviews.each &:removeFromSuperview 

     layout(view, :main_view) do |main_view| 
     week_table 

     subview(UIView, :program_nav) do 
      @week_btn = subview(UIButton.buttonWithType(UIButtonTypeRoundedRect), :week_btn) 
     end 

     @week_btn.when_tapped do 
      open WeekScreen.new(nav_bar: true) 
     end 
     end 
    end 

    # a bunch of table stuff removed here to keep this clean-ish 
    end 
end 

風格/ week_styles.rb

Teacup::Stylesheet.new :week_styles do 
    style :main_view, 
    frame: [[0,30], ["100%", "100% - 30]] 

    style :program_nav, 
    frame: [[0, "100% - 78"], ["100%", 78]], 
    backgroundColor: "#f1f2f2".to_color, 
    autoresizingMask: (UIViewAutoresizingFlexibleLeftMargin | 
        UIViewAutoresizingFlexibleRightMargin | 
        UIViewAutoresizingFlexibleTopMargin) 

    style :week_btn, 
    center_x: '50%', 
    center_y: '50%', 
    width: 36, 
    height: 36, 
    backgroundImage: UIImage.imageNamed("week-view-btn") 
end 

回答

0

嘗試將呼叫移至on_createon_load之內。屏幕的view屬性nil在您的init.tap區塊內。