iOS - NavController & Custom Views

2019-08-21 03:00发布

问题:

The Crash:

-[UIImageView setParentViewController:]: unrecognized selector sent to instance 0x58701e * Termintating app due to uncaught execption 'NSInvalidArgumentExecption', reason: '-[UIImageView setParentViewController:]: unrecognised selector sent to instance 0x58701e0'

This occurs when I'm trying to push a custom UIViewController that is made without IB.

When I do this with IB it works but it's not exactly what I need.

What is being called for my delegate

-(void)switchToTrailerOne 
{
CGsize screenSize = [UIScreen mainScreen].bounds.size;
CGRect screenBounds = CGRectMake(0, 0, ScreenSize.width, screenSize.height);
TrailersViewController *trailersController = [[TrailersViewController alloc] initWithFrame:screenBounds];

[self.navController pushViewController:trailersController animated:NO]; (Crashes on this line)

[trailersController gotoFirstTrailer];
}

Ask me about any other code that looks as I'm almost never away from a comp for more then an hour at a time.

Edit: The files are a bit long any particular sections you're interested in? I'll post a few canidates that I find likely...

-(void)loadView{

    CGSize screenSize = [UIScreen mainScreen].bounds.size;
    CGRect screenBounds = CGRectMake(0, 0, screenSize.width, screenSize.height);
    myTrailersView = [[UIImageView alloc] initWithFrame:screenBounds];
    myTrailersView.autoresizesSubviews = YES;
    self.view = myTrailersView;
}

//Initiation Method
- (void)viewDidLoad {
    [super viewDidLoad];

    //self.myTrailersView.frame = self.view.frame;

    //Turn User Interaction ON - UI Image Views are Off By Default
    myTrailersView.userInteractionEnabled = YES;

    //Set Position Counters to starting values
    currentNode              = 0;
    currentPosition          = 0;

    //Allocate the Node Collection
    nodeCollection           = [NodeSet alloc];

    //Copy the Node Collection to the Receiver Array
    nodeArray                = nodeCollection.createNodeList;

    //Done With Node Collection Release it
    [nodeCollection release];

    //
    //Create the button that launches the cutaway view
    //
    UIBarButtonItem *rotationButton = [[UIBarButtonItem alloc] initWithTitle:@"Cutaway View" 
                                                                       style:UIBarButtonItemStylePlain 
                                                                      target:self 
                                                                      action:@selector(gotoRotationView)];
    self.navigationItem.rightBarButtonItem = rotationButton;
    [rotationButton release];

    ////////Setup the Swipe Forward Recognizer////////

    UISwipeGestureRecognizer *recognizerUp;

    recognizerUp             = [[UISwipeGestureRecognizer alloc]
                    initWithTarget:self action:@selector(handleSwipeFrom:)];

    [recognizerUp setDirection:(UISwipeGestureRecognizerDirectionUp)];
    [myTrailersView addGestureRecognizer:recognizerUp];
    [recognizerUp release];

    ////////Setup the Swipe Backward Recognizer////////

    UISwipeGestureRecognizer *recognizerDown;

    recognizerDown            = [[UISwipeGestureRecognizer alloc] 
                                    initWithTarget:self action:@selector(handleSwipeFrom:)];

    recognizerDown.direction  = UISwipeGestureRecognizerDirectionDown;
    [myTrailersView addGestureRecognizer:recognizerDown];
    [recognizerDown release];

    ////////Setup the Swipe Left Recognizer////////

    UISwipeGestureRecognizer *recognizerLeft;

    recognizerLeft            = [[UISwipeGestureRecognizer alloc] 
                                    initWithTarget:self action:@selector(handleSwipeFrom:)];

    recognizerLeft.direction  = UISwipeGestureRecognizerDirectionLeft;
    [myTrailersView addGestureRecognizer:recognizerLeft];
    [recognizerLeft release];

    ////////Setup the Swipe Right Recognizer////////

    UISwipeGestureRecognizer *recognizerRight;

    recognizerRight           = [[UISwipeGestureRecognizer alloc] 
                                    initWithTarget:self action:@selector(handleSwipeFrom:)];

    recognizerRight.direction = UISwipeGestureRecognizerDirectionRight;
    [myTrailersView addGestureRecognizer:recognizerRight];
    [recognizerRight release];
}

- (id)initWithFrame:(CGRect)frame {
    self = [super.view initWithFrame:frame];

    return self;
}

回答1:

It's appears as if you're trying to push a custom UIView rather than a custom UIViewController. Check the TrailersViewController class hierarchy.