user1580957
user1580957

Reputation:

Passing array to another view

I am a newbie in xcode. I am trying to pass an array from one view to another. I want to pass an integer profileid in the ProfileViewController to an array in the FavouritesViewController. Once the FavouritesViewController is loaded the log will display the array.

Here's my code:

ProfileViewController.h

- (IBAction)AddFavouritesClicked:(id)sender;

ProfileViewController.m

@synthesize profileid;


int profileid = 0;

- (IBAction)AddFavouritesClicked:(id)sender {

    FavouritesViewController *favController = [[FavouritesViewController alloc]init];
    [favController.favouritesArray initWithObjects:[NSNumber numberWithInt:profileid], nil];
    NSLog(@"%@", favController.favouritesArray);


}

FavouritesViewController.h

@interface FavouritesViewController : UITableViewController
{
    NSMutableArray *favouritesArray;
}

@property(nonatomic, retain)NSArray *favouritesArray;
@end

FavouritesViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%@", favouritesArray);
}

So far the favouritesArray value is always null

Any help would be very much appreciated. Thanks in advance!

Here is my Log every time I clicked the Addtofavoutites button

2013-01-27 22:54:52.865 Ad&Promo[8058:c07] (
2
)
2013-01-27 22:56:10.958 Ad&Promo[8058:c07] (
2
)
2013-01-27 22:56:11.705 Ad&Promo[8058:c07] (
2
)
2013-01-27 22:56:12.191 Ad&Promo[8058:c07] (
2
)

But instead I want it to look like this..

2013-01-27 22:54:52.865 Ad&Promo[8058:c07] (
2,2,2,2
)

Upvotes: 1

Views: 222

Answers (2)

sergio
sergio

Reputation: 69027

First of all, you should review the syntax for your array creation. It should be:

favController.favouritesArray = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:profileid], nil];

This alone will not fix your issues, though, I gues

This is quite a typical error that shows up here on S.O. In the following 2 statements:

FavouritesViewController *favController = [[FavouritesViewController alloc]init];
favController.favouritesArray = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:profileid], nil];

you are allocating a new FavouritesViewController. That has nothing to do with any other FavouritesViewController that you have already initialized in your app. That explain why its internal array is empty.

What you need to do is make your ProfileViewController instance aware of your FavouritesViewController instance (as opposed to instantiating a private instance of the latter inside the former).

So, simply define a FavouritesViewController property inside of ProfileViewController, and initialize it properly. Then you will be able to do:

- (IBAction)AddFavouritesClicked:(id)sender {

    self.favController.favouritesArray = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:profileid], nil];

}

and this will set the value you need to set into the other view controller you have.

EDIT:

a better design for this kind of requirement is using a model (as in model-view-controller).

Instead of letting one of the two controllers know about the other, you create a new class (the model) responsible for holding all the shared data in your app.

This class would be accessible from any other class in your app, so that they could set and get the data it stores.

This class could be a singleton:

[MyModel sharedModel].favArray = ...

or it could be a class exposing only class methods, e.g.:

[MyModel setFavArray:...];

Upvotes: 1

Ramy Al Zuhouri
Ramy Al Zuhouri

Reputation: 21966

You're not assigning the pointer and you're missing the alloc method, do it this way:

favController.favouritesArray=[[NSArray alloc]initWithObjects:[NSNumber numberWithInt:profileid], nil];

Upvotes: 1

Related Questions