Question

J'ai des problèmes pour passer d'une vue à l'autre et j'ai besoin d'aide.C'est quelque peu compliqué, alors soyez indulgents avec moi, s'il vous plaît.

J'ai un UINavigationController appelé JobsNavController.La première vue dans JobsNavController contient un UITableViewController appelé JobsTableViewController [avec une plume liée appelée JobTableView.xib].Je veux ajouter un Add UIButton à l'intérieur du UINavController pour « créer un nouveau travail ».Lorsque vous cliquez dessus, il devrait passer de JobTableView.xib à mon JobCreateViewController plume appelée JobCreateView.xib.Puisque le bouton « Ajouter » est situé dans UINavController, j'ai mis le code IBAction à l'intérieur. JobsNavController.h and .m.

Voici la 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

Et voici mon 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];
}

Je ne reçois aucune erreur de construction/compilation mais le simulateur génère une exception lorsque je clique sur le bouton indiquant :

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'
Était-ce utile?

La solution

Quand vous appelez tellDelegateToFlip assurez-vous de le faire sans paramètres - c'est ce qui cause le crash.Si vous remarquez dans le rapport de crash, il est indiqué que le sélecteur n'est pas reconnu. tellDelegateToFlip: est envoyé à votre instance.Notez les deux points qui suivent le nom de la méthode.Cela signifie que partout où vous avez appelé la méthode, vous avez envoyé un objet avec elle.Si vous utilisez performSelector:withObject:afterDelay: assurez-vous ne le faites pas utilisez un deux-points.

Modifier:

Au lieu de:

UIViewController* transitionTo = jobCreateViewController;

pourquoi n'utilises-tu pas simplement :

JobCreateViewController* transitionTo = jobCreateViewController;

Ou vous pourriez le lancer, en supposant que JobCreateViewController hérite de UIViewController.

Autres conseils

mauvaise implémentation de la méthode :

-(IBAction)tellDelegateToFlip:(id)sender;

devrait être:

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

dans votre JobsNavController.m

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top