2012-11-19 28 views
0

我仍然对iOS开发不熟悉,但遇到了一个我无法解决的问题,而且我尝试在网上查找,但找不到任何东西。实例变量在UINavigationController中的ViewController中不起作用

我正在使用UIImagePickerController来选择和图像,我在App Delegate中使用它。当图像返回时,在imagePickerController:didFinishPickingMediaWithInfo方法中,我想用视图控制器制作一个新的导航控制器,并将其放在“应用程序”上。

这里是我如何做它:

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 
在photoViewController

不过,我并没有获得合成和viewDidLoad中加载的任何实例变量。他们都返回null。还有一个tableView和调用重载tableView实际上并不会导致tableView响应。

下面是一些代码从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); 
} 

,也是addPhotoFromData方法:

- (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 

一切工作之前,我在UINavigationController的补充。我完全失去了。

编辑:经过一些更多的调试尝试后,我发现调用addPhotoFromData时未加载视图。 viewDidLoad被称为后缀。有没有办法延迟方法调用?

+0

为什么您需要制作新的导航控制器?只是推动当前的新观点。 – msgambel

+0

这是一个选项卡式应用程序,我想要复制Instagram,如果您按中间选项卡,您可以拍摄照片,然后再转到另一个视图,您无法看到选项卡栏。之后我需要另一个视图,所以我认为我应该使用导航控制器。 – Yuriy

+0

另外,如果我在初始photoViewController上推另一个视图控制器,那里没有实例变量的问题。 – Yuriy

回答

1

任何原因您不能在viewDidLoad方法内的PhotoViewController调用addPhotoFromData:?您始终可以从视图控制器访问应用程序代理的属性:

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

谢谢!那就是诀窍。 [你也应该包括你的AppDelegate.h文件来使这项工作:)] – Yuriy