Yuriy
Yuriy

Reputation: 398

Instance variables not working in ViewController in UINavigationController

I'm still new to iOS development but I've ran into a problem that I can't solve and I've tried looking online but can't find anything yet.

I'm using a UIImagePickerController to pick and image and I'm using it in the App Delegate. When an image is returned, in the imagePickerController:didFinishPickingMediaWithInfo method, I want to make a new navigation controller with a view controller and put it over the "app".

Here is how I'm doing it:

CustomNavigationController *customNavigationController = [[CustomNavigationController alloc] init];
PhotoViewController *photoViewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:[NSBundle mainBundle]];

[customNavigationController pushViewController:photoViewController animated:NO];
[customNavigationController.view setFrame:[[UIScreen mainScreen] applicationFrame]];

[photoViewController release];
[self.window addSubview:customNavigationController.view];

//Call method of photoViewController.
[[customNavigationController.viewControllers objectAtIndex:0] addPhotoFromData:info];

[self.tabBarController dismissViewControllerAnimated:YES completion:nil]; //Get rid of UIImagePickerController

However in the photoViewController, I don't have access to any instance variables synthesized and loaded in viewDidLoad. They all return to null. There is also a tableView and calls to reload the tableView do not actually cause the tableView to respond.

Here is some of the code from photoViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.photoCount = 0;
    self.timestamp = [[NSDate date] timeIntervalSince1970];
    self.photos = [[NSMutableArray alloc] initWithCapacity:5];
    self.photosData = [[NSMutableArray alloc] initWithCapacity:5];
    self.uploadingCount = 0;

    UINib *customCell = [UINib nibWithNibName:@"CustomTableCell" bundle:[NSBundle mainBundle]];

    [self.tableView registerNib:customCell forCellReuseIdentifier:@"customCell"];
    self.tableView.separatorColor = [UIColor clearColor];

    NSLog(@"%@", self);
}

and also the addPhotoFromData method:

- (void)addPhotoFromData:(NSDictionary *)info
{    
   [self.photos addObject:info];
   NSLog(@"%@", self.photos); //Doesn't add "info" and does not return anything when later called from other methods.

   [self.tableView reloadData]; //Doesn't work

Everything was working before I add in the UINavigationController. I'm completely lost.

EDIT: After some more debugging attempts, I have discovered that the view is not loaded when addPhotoFromData is called. viewDidLoad is called afterwords. Is there a way to delay method calls?

Upvotes: 0

Views: 249

Answers (1)

J Shapiro
J Shapiro

Reputation: 3861

Any reason you can't have the PhotoViewController call addPhotoFromData: inside the viewDidLoad method? You can always access properties of the app delegate from the view controller:

YourAppDelegateType * delegate = [UIApplication sharedApplication].delegate;
[self addPhotoFromData:delegate.info];

Upvotes: 1

Related Questions