2012-07-11 49 views
0

我有一个按钮。当你点击按钮时,它将打开一个新的UITabBarController(在工具箱中预先定义)。iOs 5,initWithDecoder在我的自定义init之前被调用

这是代码:

DealerView *view = [[DealerView alloc] initWithDealerId:976]; 
[self.navigationController pushViewController:view animated:YES]; 

正如你可以看到我用我自己的自定义初始化在NSUInteger号到的UITabBarController通过。

现在在我的UITabBarController中,我想分发这个ID号给所有孩子(标签栏中的所有标签)。我这样做与此代码:

- (void)viewDidLoad 
{ 
    NSInteger i; 
    for (i = 0; i < [self.childViewControllers count]; i++){ 
     DealerBaseView *item = (DealerBaseView*) [self.childViewControllers objectAtIndex:i]; 
     item.dealerId = self->dealerId; 
    } 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

这样,每个子视图可以使用这个ID号来获得自己的viewDidLoad方法中正确的数据库信息。

的问题是自我> dealerId始终为0

,所以我说我的代码里面的一些破发点,看看为什么自> dealerId总是返回0(你可以看到它的设置初始化方法)。

- (id) initWithDealerId:(NSUInteger)i{ 

    self = [super init]; 

    if (self){ 
     self->dealerId = i; 
    } 
    return self; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    return self; 
} 

- (id) init{ 
    self = [super init]; 
    return self; 
} 

- (id) initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
    return self; 
} 

现在事实证明,在这件事的顺序如下:

  1. 的initWithCoder - 的UITabBarController
  2. viewDidLoad中 - 的UITabBarController
  3. viewDidLoad中 - 的UITabBarController的子选项卡
  4. initWithNibName - UITabBarController
  5. viewDidLoad - UITabBarController(第二次它击中这个)
  6. initWithDealerId - 的UITabBarController

所以我的init方法获取此系列最后调用,因此dealerId将始终为0

我的问题很简单。我如何设置dealerId,以便在viewDidLoad被UITabVarController和UITabVarController项(Tab控件中的所有子项)调用时可用?

回答

0

问题似乎是,您以两种不同的方式创建两个不同的DealerView对象,一个来自xib或故事板,另一个来自代码。如果你NSLog的自我价值在不同的初始化方法,我相信你会看到不同的地址,这表明不同的对象。你所看到的单一事件序列确实不是。

初始化问题的答案是只使用一个对象。

相关问题