我有一个按钮。当您单击按钮时,它将打开一个新的 UITabBarController(在工具箱中预定义)。
这是代码:
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 方法中获取正确的数据库信息。
问题是 self->dealerId 始终为 0。
所以我在我的代码中添加了一些断点,看看为什么 self->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;
}
现在事实证明,事情的顺序如下:
- initWithCoder - UITabBarController
- viewDidLoad - UITabBarController
- viewDidLoad - UITabBarController 的子选项卡
- initWithNibName - UITabBarController
- viewDidLoad - UITabBarController(第二次点击这个)
- initWithDealerId - UITabBarController
所以我的 init 方法在这个系列中最后被调用,因此dealerId 将始终为 0。
我的问题很简单。我如何设置dealerId,以便在为UITabVarController 和UITabVarController 项目(选项卡控制器内的所有子项目)调用viewDidLoad 时它可用?