Take the 2-minute tour ×

i'm having a hard time with Xcode; for some reason, it just won't let me pass a variable from one view controller class to another. It should work, i was basically just copying/pasting from my other classes (it works on all of them... except this one). I've been at it all night long, tried everything i could think of and still it remains.

Here's the view controller class where I'm making the call:


#import <UIKit/UIKit.h>
#import "Filme.h"
#import "Festival.h"
#import "Top10Discos.h"
#import "Peca.h"

@class DetalhesViewController;

@interface ResultadosViewController : UIViewController
    // Navegation
    DetalhesViewController *dvc;
    BOOL isViewPushed;

    // What i'd really like to pass lol
    NSArray *array_resultados;


@property (nonatomic, retain) NSArray *array_resultados;
@property (nonatomic, readwrite) BOOL isViewPushed;



#import "ResultadosViewController.h"
#import "DetalhesViewController.h"
#import "Filme.h"
#import "Peca.h"
#import "Top10Discos.h"
#import "Festival.h"

@implementation ResultadosViewController
@synthesize isViewPushed, array_resultados;



    if (indexPath.row == 2)
    	if(dvc != nil)
    		[dvc dealloc];

    	NSString *ffs = [[array_resultados objectAtIndex:indexPath.row] TituloFilme];

    	dvc = [[DetalhesViewController alloc] initWithNibName:@"DetailedView" bundle:[NSBundle mainBundle]];

    	**resultadosControllerCell.array_resultados  = [self array_resultados];** 
    	*"Request for member 'array_resultados' in something not a structure or union"*

    	//Push the view controller to the top of the stack.
    	[self.navigationController pushViewController:dvc animated:YES];


And here's the other class i want to send the array into:


#import <UIKit/UIKit.h>

#import "Filme.h"
#import "Festival.h"
#import "Top10Discos.h"
#import "Peca.h"

@interface DetalhesViewController : UIViewController
    // Navegacao
    NSArray *array_resultados;


@property (nonatomic, retain) NSArray *array_resultados;

I'm not sure if any of you would to see the .m file for this class; in that case, just ask.

Thanks in advance, Hal

PS: tried with other variables (other types too), cleansed/rebuilt, recreated xib file, you name it... i'm outta tricks :(

share|improve this question
You might get better replies if you change the title to be more descriptive. such as "Unable to pass variables between Controllers in an iPhone project" –  Abizern Dec 20 '08 at 10:42
Thanks for the input, i'll do that ;) –  Hal Dec 20 '08 at 15:02

7 Answers 7

Just a guess, but did you try using the arrow operator -> instead of the dot operator . ?

resultadosControllerCell->array_resultados  = [self array_resultados];
share|improve this answer

is resultadosControllerCell a valid object in the ResultadosViewController class?

share|improve this answer

This doesn't exaclty answer your question, but your memory management is a bit wonky. This line:

[dvc dealloc];

should read like this:

[dvc release];
dvc = nil;

In Cocoa, you should never call dealloc directly -- follow the retain/release/autorelease pattern and things will work better and as intended.

share|improve this answer

Ok i've had it; using a cheap trick to show the info:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:ffs message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    UILabel *myTextField = [[UILabel alloc] init];
    myTextField.text = @"FFS!";
    CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0.0, 130.0);
    [myAlertView setTransform:myTransform];

    [myTextField setBackgroundColor:[UIColor whiteColor]];
    [myAlertView addSubview:myTextField];
    [myAlertView show];
    [myAlertView release];

Really hate using this, but i'm already a day late. I should have delivered it by yesterday.

Thanks for your help guys, if you happen to find the solution please let me know. You never know if it'll happen again :/


share|improve this answer

First off, don't use -> — that's direct instance-variable access. It may work, but you're changing another object's instance variables without its knowledge, which is just asking for trouble.

And no, Adam Rosenfield didn't mean dvc->array_resultados; he meant resultadosControllerCell->array_resultados, which is what he said and which he based on what you said.

The correct solution is a blend of your original line and your revision of Adam's line:

dvc.array_resultados = [self array_resultados];

This goes through the property you declared in the DetalhesViewController class.

Speaking of which, you should declare that property as copy, not retain. Otherwise, you'll find yourself holding somebody else's mutable array, which they will then modify—more bad mojo.

share|improve this answer

A more competent way of doing this is to separate the data from both the viewcontrollers into a model. You will have a separate class(NSObject) called ResultadoModel.h/m. This will be a singleton, so both classes can access the same instance.

You would access the array by doing something like this(in both vcs):

[[[ResultadoModel sharedInstance] array_resultados] propertyOrMethod];

You can search how to create a singleton, it's very simple and very powerful.

share|improve this answer

Follow these simple steps please, it should work.

In your SecondViewController:

  1. Create an initializer in the second View Controller. Ex:

    -(id)initWithResultsArray: (NSArray *) resultsArray;

  2. Create a variable for holding the array. Say myResultsArray.

  3. Inside the initWithResultsArray method, save the value of resultsArray to myResultsArray.

  4. Initialize the SecondViewController using initWithResultsArray instead of just init.

  5. Present your controller as usual, you will be able to work with myResultsArray.

Hope this helps.

Monica ツ

share|improve this answer

Your Answer

