我有一个按钮。当您单击该按钮时,它将打开一个新的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方法中获取正确的数据库信息。
问题是自我&gt; dealerId始终为0.
所以我在代码中添加了一些断点,看看为什么self-&gt; 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;
}
现在事实证明,事情的顺序如下:
所以我的init方法最后在这个系列中被调用,因此dealerId将始终为0.
我的问题很简单。我如何设置dealerId,以便在为UITabVarController和UITabVarController项(选项卡控制器内的所有子项)调用viewDidLoad时它是可用的?
答案 0 :(得分:0)
问题似乎在于您以两种不同的方式创建两个不同的DealerView对象,一个来自xib或故事板,另一个来自代码。如果你在不同的init方法中使用NS记录self的值,我相信你会看到不同的地址,它们表示不同的对象。你所看到的单一事件序列实际上并非如此。
初始化问题的答案是仅使用一个对象。