2013-12-24 1 views
1

ProMotion, Teacup 및 MMDrawerController 조합을 사용하고 있습니다. 응용 프로그램을로드 할 때 모든 것이 제대로 작동하지만 한 화면에서 다른 화면으로 변경하려고하면 superview가 0이므로 Teacup에서 오류가 발생합니다. 교사 오류 : *** Terminating app due to uncaught exception 'NoMethodError', reason: 'calculations.rb:15:in calculate:': undefined method 'bounds' for nil:NilClass (NoMethodError)입니다. view.superview가 null이기 때문에 그것은 던져지고 있습니다.RubyMotion : 새 화면을 연 후 슈퍼 뷰 손실

초보자이지만 Teacup 오류는 모든 것을 설정 한 방식의 더 큰 문제 또는 MMDrawerController와의 비 호환성 문제 일뿐입니다.

그래서 앱이로드되고 주간 화면으로 이동하며 주간 화면에서는 버튼이있는 주간 버튼을 추가하여 주간 화면으로 돌아갑니다. 해당 버튼을 클릭하면 오류가 발생합니다.

화면/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_create으로 전화를 걸어 on_load으로 시도해보십시오. 화면의 view 속성은 init.tap 블록 안에 nil입니다.