0

У меня возникают проблемы с переходом между представлениями и вам нужна помощь. Это несколько раздражительно, так что медведь со мной, пожалуйста.Задачи Objective-C при переходе между видами

У меня есть UINavigationController под названием JobsNavController. Первое представление в JobNavController содержит UITableViewController с именем JobsTableViewController [со связанным ножом, называемым JobTableView.xib]. Я хочу добавить UIButton Add внутри UINavController для создания нового задания. При щелчке, он должен перевернуть с 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 убедитесь, что вы делаете это без параметров - это то, что вызывает крушение. Если вы заметили в отчете о сбое, он говорит, что непризнанный селектор tellDelegateToFlip: отправляется в ваш экземпляр. Обратите внимание на двоеточие, идущее после имени метода. Это означает, что везде, где вы вызывали метод, вы отправили с ним объект. Если вы используете performSelector:withObject:afterDelay:, убедитесь, что вы не используете используйте двоеточие.

Edit:

Вместо:

UIViewController* transitionTo = jobCreateViewController; 

почему бы вам не просто использовать:

JobCreateViewController* transitionTo = jobCreateViewController; 

Или вы могли бы бросить его, предполагая, что JobCreateViewController наследует от UIViewController.

+0

, который решил мою проблему, однако теперь я получаю предупреждение в строке 'UIViewController * transitionTo = ...'. Утверждение: «Несовместимые типы указателей инициализируют« UIViewController * »с выражением типов« JobCreateViewController * »« – sadmicrowave

+0

Непонятно, почему вы объявляете его с типом UIViewController. Почему бы просто не объявить его как «JobCreateViewController *»? –

+0

Можете ли вы предоставить замену синтаксической строки, которую я бы использовал, чтобы сделать это по-своему? – sadmicrowave

1

неправильной реализации метода:

-(IBAction)tellDelegateToFlip:(id)sender; 

должно быть:

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

в вашем JobsNavController.m

Смежные вопросы