Reputation:
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;
@end*
#import "ResultadosViewController.h"
#import "DetalhesViewController.h"
#import "Filme.h"
#import "Peca.h"
#import "Top10Discos.h"
#import "Festival.h"
@implementation ResultadosViewController
@synthesize isViewPushed, array_resultados;
(...)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic -- create and push a new view controller
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;
@end
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 :(
Upvotes: 4
Views: 21250
Reputation: 21
Follow these simple steps please, it should work.
In your SecondViewController:
Create an initializer in the second View Controller. Ex:
-(id)initWithResultsArray: (NSArray *) resultsArray
;
Create a variable for holding the array. Say myResultsArray
.
Inside the initWithResultsArray
method, save the value of resultsArray
to myResultsArray
.
Initialize the SecondViewController
using initWithResultsArray
instead of just init
.
Present your controller as usual, you will be able to work with myResultsArray
.
Hope this helps.
Monica ツ
Upvotes: 0
Reputation: 108
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.
Upvotes: 0
Reputation: 96333
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.
Upvotes: 4
Reputation:
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 :/
Cheers!
Upvotes: 0
Reputation: 6618
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.
Upvotes: 3
Reputation: 400274
Just a guess, but did you try using the arrow operator ->
instead of the dot operator .
?
resultadosControllerCell->array_resultados = [self array_resultados];
Upvotes: 0