Switch views problem

Discussion in 'iOS Programming' started by dogwong, May 19, 2010.

  1. macrumors newbie

    Joined:
    May 17, 2010
    #1
    I follow this viedo (http://www.youtube.com/watch?v=zu31fCIwt1E) and make a simular apps
    but it throw a error:
    "expected expression before 'ThirdViewController'"
    on the line
    "[self presentModalViewController:ThirdViewController animated:YES];"

    I don't know what it mean....
    is it because the simulator version? (i use 3 but the video use 2)
    and how to switch view if this way is wrong

    Please help....
    and sorry for my bad English
    thanks
     
  2. macrumors member

    Joined:
    Apr 18, 2010
    Location:
    Chicago
  3. Moderator

    dejo

    Staff Member

    Joined:
    Sep 2, 2004
    Location:
    The Centennial State
    #3
    Remember that Objective-C is case-sensitive and that ThirdViewController is a class name not an instance variable name.
     
  4. thread starter macrumors newbie

    Joined:
    May 17, 2010
    #4
    (project name is SWF)

    here is the code:

    SWFAppDelegate.h
    Code:
    #import <UIKit/UIKit.h>
    
    @class SWFViewController;
    
    @interface SWFAppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow *window;
        SWFViewController *viewController;
    }
    
    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet SWFViewController *viewController;
    
    @end
    
    
    SWFAppDelegate.m
    Code:
    #import "SWFAppDelegate.h"
    #import "SWFViewController.h"
    
    @implementation SWFAppDelegate
    
    @synthesize window;
    @synthesize viewController;
    
    
    - (void)applicationDidFinishLaunching:(UIApplication *)application {    
        
        // Override point for customization after app launch    
        [window addSubview:viewController.view];
        [window makeKeyAndVisible];
    }
    
    
    - (void)dealloc {
        [viewController release];
        [window release];
        [super dealloc];
    }
    
    
    @end
    
    SWFViewController.h
    Code:
    #import <UIKit/UIKit.h>
    #import "SecondViewController.h"
    
    @interface SWFViewController : UIViewController {
    	IBOutlet UIButton *about;
    	IBOutlet SecondViewController *SecondViewController;
    }
    
    - (IBAction)showAbout;
    
    @end
    
    SWFViewController.m
    Code:
    #import "SWFViewController.h"
    
    
    @implementation SWFViewController
    
    
    
    /*
    // The designated initializer. Override to perform setup that is required before the view is loaded.
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
            // Custom initialization
        }
        return self;
    }
    */
    
    /*
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    - (void)loadView {
    }
    */
    
    
    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    */
    
    
    
    // Override to allow orientations other than the default portrait orientation.
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }
    
    
    - (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.
    }
    
    - (void)viewDidUnload {
    	// Release any retained subviews of the main view.
    	// e.g. self.myOutlet = nil;
    }
    
    
    - (void)dealloc {
        [super dealloc];
    }
    
    - (IBAction)showAbout {
    	[COLOR="DarkOrange"][self presentModalViewController:SecondViewController animated:YES];[/COLOR]
    // this line have error
    }
    
    @end
    
    SecondViewController.h
    Code:
    #import <UIKit/UIKit.h>
    #import "ThirdViewController.h"
    
    
    @interface SecondViewController : UIViewController {
    	
    	IBOutlet ThirdViewController *ThirdViewController;
    	
    }
    
    - (IBAction)gotoThirdView;
    
    - (IBAction)gotoBack;
    
    @end
    SecondViewController.h

    Code:
    #import <UIKit/UIKit.h>
    #import "ThirdViewController.h"
    
    
    @interface SecondViewController : UIViewController {
    	
    	IBOutlet ThirdViewController *ThirdViewController;
    	
    }
    
    - (IBAction)gotoThirdView;
    
    - (IBAction)gotoBack;
    
    @end
    SecondViewController.m

    Code:
    #import "SecondViewController.h"
    
    
    @implementation SecondViewController
    
    - (IBAction)gotoThirdView{
    	[self presentModalViewController:ThirdViewController animated:YES];
    }
    
    - (IBAction)goBack{
    	[self dismissModalViewControllerAnimated:YES];
    }
    /*
     // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
            // Custom initialization
        }
        return self;
    }
    */
    
    /*
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    - (void)loadView {
    }
    */
    
    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    */
    
    /*
    // Override to allow orientations other than the default portrait orientation.
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    */
    
    - (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.
    }
    
    - (void)viewDidUnload {
    	// Release any retained subviews of the main view.
    	// e.g. self.myOutlet = nil;
    }
    
    
    - (void)dealloc {
        [super dealloc];
    }
    
    
    [COLOR="darkorange"]@end[/COLOR] warning: incomplete implementation of class 'SecondViewController'
    
    
    
    ThirdViewController.h
    Code:
    #import <UIKit/UIKit.h>
    
    
    @interface ThirdViewController : UIViewController {
    	
    	
    	
    }
    
    - (IBAction)goBack;
    
    @end
    ThirdViewController.m

    Code:
    #import "ThirdViewController.h"
    
    
    @implementation ThirdViewController
    
    - (IBAction)goBack{
    	[self dismissModalViewControllerAnimated:YES];
    }
    
    /*
     // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
            // Custom initialization
        }
        return self;
    }
    */
    
    /*
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    - (void)loadView {
    }
    */
    
    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    */
    
    /*
    // Override to allow orientations other than the default portrait orientation.
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    */
    
    - (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.
    }
    
    - (void)viewDidUnload {
    	// Release any retained subviews of the main view.
    	// e.g. self.myOutlet = nil;
    }
    
    
    - (void)dealloc {
        [super dealloc];
    }
    
    
    @end

    SWFViewController.xib

    a button: title: about
    connection: Touch up inside - file's owner showAbout

    SecondView.xib

    a label, text: Second
    a button, title: go to third
    connection: Touch up inside - file's owner gotoThirdView
    a button, title: back
    connection: Touch up inside - file's owner gotoBack

    ThirdView.xib
    a label, text: Third
    a button, title: Back
    connection: Touch up inside - file's owner gotoBack


    Thanks
     
  5. macrumors newbie

    Joined:
    Oct 27, 2008
    #5
    Hi,
    as dejo said...this part of the code is wrong:
    Code:
    - (IBAction)gotoThirdView
    {
    	[self presentModalViewController:ThirdViewController animated:YES];
    }
    
    ThirdViewController is a class, you must use instance of that class in order for this to work...for example

    Code:
    - (IBAction)gotoThirdView
    {
            ThirdViewController *thirdViewController=[[ThirdViewController alloc] init];
    	[self presentModalViewController:thirdViewController animated:YES];
            [thirdViewController release];
    }
    
    notice the capital letters...
     
  6. thread starter macrumors newbie

    Joined:
    May 17, 2010
    #6
    Build and Run succeeded.

    But when i try that, it is normal if I switch between first and second view, and it crash when I switch to third view, what's wrong?
    and is that any way to find what make the apps carsh?
    Thanks
     

Share This Page