在视图之间转换时的Objective-C问题

时间:2012-01-23 01:36:36

标签: objective-c xcode uiviewcontroller transition nsexception

我遇到了在视图之间转换的问题,需要一些帮助。这有点令人沮丧,所以请耐心等待。

我有一个名为JobsNavController的UINavigationController。 JobsNavController中的第一个视图包含一个名为JobsTableViewController的UITableViewController [带有一个名为JobTableView.xib的链接笔尖]。我想在UINavController中添加一个Add UIButton来“创建一个新工作”。点击后,它应该从JobTableView.xib翻转到名为JobCreateViewController的{​​{1}}笔尖。由于'add'按钮位于UINavController中,我将IBAction代码放在​​JobCreateView.xib内。

以下是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];
}

2 个答案:

答案 0 :(得分:1)

当你致电tellDelegateToFlip时,请确保你没有参数 - 这就是导致崩溃的原因。如果您在崩溃报告中发现,则表示无法识别的选择器tellDelegateToFlip:正在发送到您的实例。注意冒号位于方法名称之后。这意味着无论您何时调用该方法,都会使用它发送一个对象。如果您使用performSelector:withObject:afterDelay:,请确保使用冒号。

编辑:

而不是:

UIViewController* transitionTo = jobCreateViewController;

为什么不使用:

JobCreateViewController* transitionTo = jobCreateViewController;

或者你可以投射它,假设JobCreateViewController继承自UIViewController。

答案 1 :(得分:1)

方法执行错误:

-(IBAction)tellDelegateToFlip:(id)sender;

应该是:

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

在你的JobsNavController.m