Note that there are some explanatory texts on larger screens.

plurals
  1. POGetting "unrecognized selector sent to instance" For UIView
    text
    copied!<p>I have tried to cast an implementation of my UIView class to my view controller. However, when try to call a method for my class it throws "unrecognized selector sent to instance".</p> <p>Here is what I am doing in my header file:</p> <pre><code>#import &lt;UIKit/UIKit.h&gt; @interface GameViewController : UIViewController{ NSTimer *gameLoop; } - (IBAction)quitGame:(id)sender; - (IBAction)rotateLeft:(id)sender; - (IBAction)rotateRight:(id)sender; - (IBAction)thrust:(id)sender; @end typedef enum { NOTREADY, READY, RUNNING, WON, LOST, PAUSED } GameState; typedef enum { EASY, MEDIUM, HARD } GameDifficulty; typedef enum { THRUSTERS_ON, THRUSTERS_OFF } ThrusterState; // Declaration of other constants used to manage the physics static const int FUEL_INITIAL = 200; static const int FUEL_MAX = 200; static const int FUEL_BURN = 10; static const int MAX_INIT = 30; static const int MAX_SPEED = 120; static const int ACCELERATION_DOWN = 35; static const int ACCELERATION_UP = 80; static const double GRAVITY = 9.8; @interface GameView : UIView { @private UIImage *plander_thrust; @private UIImage *plander_nothrust; @private UIImage *plander_crashed; // Other game member variables @private GameState gstate; @private GameDifficulty level; @private ThrusterState thrusters; @private int fuel; @private int speed_x; @private int speed_y; @private double rotation; // Define our lander’s X and Y on-screen coordinates @private int loc_x; @private int loc_y; } @property (nonatomic, retain) UIImage *lander_nothrust; // Declare our class methods - (void) newGame; - (void) updateLander; - (void) rotateLeft:(id)sender; - (void) rotateRight:(id)sender; - (void) thrustEngine:(id)sender; @end </code></pre> <p>Now, here is what I am doing with my .m file:</p> <pre><code>#import "GameView.h" @implementation GameViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle - (void)viewDidLoad { //'timerLoop' function gameLoop = [NSTimer scheduledTimerWithTimeInterval: 0.025 target:self selector:@selector(timerLoop:) userInfo:nil repeats:YES]; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (void) timerLoop:(NSTimer *)timerObj { //so this is where I am getting the error [(GameView *)self.view updateLander]; [self.view setNeedsDisplay]; } - (IBAction)quitGame:(id)sender { [self dismissModalViewControllerAnimated:true]; } - (IBAction)rotateLeft:(id)sender { [(GameView *)self.view rotateLeft:sender]; } - (IBAction)rotateRight:(id)sender { [(GameView *)self.view rotateRight:sender]; } - (IBAction)thrust:(id)sender { [(GameView *)self.view thrustEngine:sender]; } @end @implementation GameView @synthesize lander_nothrust; -(id)initWithCoder:(NSCoder *)aDecoder{ if(self == [super initWithCoder:aDecoder]){ //initialize sprites NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"lander" ofType:@"tiff"]; self.lander_nothrust = [UIImage new]; self.lander_nothrust = [UIImage imageWithContentsOfFile:imagePath]; [self newGame]; } return self; } -(void) newGame{ gstate = READY; level = EASY; thrusters = THRUSTERS_OFF; fuel = FUEL_INITIAL; loc_x = self.frame.size.width / 2; loc_y = self.frame.size.height / 2; // Set the game as RUNNING gstate = RUNNING; } -(void)updateLander{ } // rotateLeft - rotate the lander left - (void)rotateLeft:(id)sender { // Do Something } // rotateRight - rotate the lander right - (void)rotateRight:(id)sender { // Do Something } // thrustEngine - fire the thruster on the engine - (void)thrustEngine:(id)sender { // Do Something } -(void)drawRect:(CGRect)rect{ if(gstate != RUNNING){ return; } [self.lander_nothrust drawAtPoint:CGPointMake(loc_x, loc_y)]; self.backgroundColor = [UIColor redColor]; } @end </code></pre> <p>As shown above I am getting the error with this line of code:</p> <pre><code>[(GameView *)self.view updateLander]; </code></pre> <p>I have looked around and I keep hearing that it is because I am calling a method that doesn't exist for my object, but I am not sure why it is not seeing my object implementation. I have even set the custom class in for the UIView in the Identity Inspector to "GameView" as my class.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload