0

我在视图之间转换时遇到问题,需要一些帮助。这有点令人困惑,所以请多多包涵。

我有一个 UINavigationController 名为JobsNavController. JobsNavController 中的第一个视图包含一个 UITableViewController,名为JobsTableViewController[带有一个链接的 nib,名为JobTableView.xib]。我想Add在 UINavController 中添加一个 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'
4

2 回答 2

1

当您调用时,请tellDelegateToFlip确保您在没有参数的情况下执行此操作 - 这就是导致崩溃的原因。如果您在崩溃报告中注意到,它表示正在将无法识别的选择器tellDelegateToFlip:发送到您的实例。注意方法名称后面的冒号。这意味着无论您在哪里调用该方法,您都会发送一个带有它的对象。如果您正在使用,请performSelector:withObject:afterDelay:确保不要使用冒号。

编辑:

代替:

UIViewController* transitionTo = jobCreateViewController;

你为什么不直接使用:

JobCreateViewController* transitionTo = jobCreateViewController;

或者你可以转换它,假设它JobCreateViewController继承自 UIViewController。

于 2012-01-23T01:41:01.317 回答
1

方法的错误实现:

-(IBAction)tellDelegateToFlip:(id)sender;

应该:

-(IBAction)tellDelegateToFlip:(id)sender {
...
}

在你的 JobsNavController.m

于 2012-01-23T01:41:43.313 回答