2012-01-23 49 views
0

我在視圖之間轉換問題並需要一些幫助。這有點令人費解,請耐心等待。在視圖間切換時出現Objective-C問題

我有一個名爲JobsNavController的UINavigationController。 JobsNavController中的第一個視圖包含一個名爲JobsTableViewController的UITableViewController [帶有一個名爲JobTableView.xib的鏈接的筆尖]。我想在UINavController中添加一個Add UIButton來「創建一個新的工作」。點擊後,它應該從JobTableView.xib翻轉到我的JobCreateViewController筆尖JobCreateView.xib。由於「添加」按鈕位於UINavController內,因此我將IBAction代碼放入JobsNavController.h and .m

這裏是JobsNavController.h

#import <UIKit/UIKit.h> 
@class JobCreateViewController, JobsTableViewController; 

@interface JobsNavController : UINavigationController { 
    IBOutlet UIButton *btnJobCreate; 
    IBOutlet JobCreateViewController *jobCreateViewController; 
     IBOutlet JobsTableViewController *jobsTableViewController; 
} 
-(IBAction)tellDelegateToFlip:(id)sender; 

@property (nonatomic, retain) UIButton *btnJobCreate; 
@property (nonatomic, retain) IBOutlet JobCreateViewController *jobCreateViewController; 
@property (nonatomic, retain) IBOutlet JobsTableViewController *jobsTableViewController; 

@end 

這裏是我的JobsNavController.m

#import "JobsNavController.h", "Time_Blogger1AppDelegate.h", "JobsTableViewController.h" 
@implementation JobsNavController 
@synthesize btnJobCreate, jobCreateViewController, jobsTableViewController; 
..... 
-(void)tellDelegateToFlip { 
    JobCreateViewController *jobAddView = [jobCreateViewController initWithNibName:@"JobCreateView" bundle:nil]; 

    [self setJobCreateViewController:jobAddView]; 
    [jobAddView release]; 

    UIViewController *transitionTo = jobCreateViewController; 

    //create view animation block 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.25]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES]; 
    [jobsTableViewController.view removeFromSuperview]; 
    [self.view insertSubview:transitionTo.view atIndex:0]; 
    [UIView commitAnimations]; 

    [transitionTo release]; 
} 

我沒有得到任何編譯/編譯錯誤,但模擬器拋出,當我按一下按鈕,說明一個例外:

2012-01-22 19:19:22.895 Time-Blogger1[4209:f803] 
-[JobsNavController tellDelegateToFlip:]: unrecognized selector sent to instance 0x6c85e80 2012-01-22 19:19:22.897 Time-Blogger1[4209:f803] 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'-[JobsNavController tellDelegateToFlip:]: unrecognized selector sent to instance 0x6c85e80' 
+0

如果添加在您調用'tellDelegateToFlip'的代碼,我想我可以告訴你究竟在哪裏/爲什麼它崩潰。 –

+0

@Rickay這就是我所有的'tellDelegateToFlip'代碼 – sadmicrowave

+0

我的意思是你調用方法的代碼,而不是實現它的方法。 –

回答

1

當您撥打電話tellDelegateToFlip確保你沒有參數,這是導致崩潰的原因。如果您在崩潰報告中注意到,它表示無法識別的選擇器​​正在發送到您的實例。注意方法名後面的冒號。這意味着無論你調用方法,你都會發送一個對象。如果您使用的是performSelector:withObject:afterDelay:,請確保您的不要使用冒號

編輯:

相反的:

UIViewController* transitionTo = jobCreateViewController; 

你爲什麼不只是使用:

JobCreateViewController* transitionTo = jobCreateViewController; 

或者你可以施放它,假定從UIViewController中JobCreateViewController繼承。

+0

上面我的JobsNavController.h代碼部分顯示了對該方法的調用,它解決了我的問題,但是現在我正在'UIViewController * transitionTo = ...'行發出警告。說:「不兼容的指針類型初始化'UIViewController *'與類型的表達式'JobCreateViewController *'」 – sadmicrowave

+0

我不明白爲什麼你聲明它與類型UIViewController。爲什麼不把它聲明爲'JobCreateViewController *'? –

+0

你可以提供語法行替換我會用你的方式嗎? – sadmicrowave

1

錯誤的方法實現:

-(IBAction)tellDelegateToFlip:(id)sender; 

應該是:

-(IBAction)tellDelegateToFlip:(id)sender { 
... 
} 
在JobsNavController.m