我正在尝试为我的标签视图控制器创建和设置VC。每个VC中都有一个下一个按钮,可以打开下一个选项卡,也可以在到达结尾时加载一组新选项卡。在Type1.m
和Type2.m
内部:
- (IBAction)next:(id)sender {
if (self.tabBarController.selectedIndex < [self.tabBarController.viewControllers count] - 1) {
self.tabBarController.selectedIndex += 1;
}
else {
// load nextData
NSLog(@"nextData: %@", nextData);
if (nextData == nil) {
// essentially stop the next button from working
return;
}
self.tabBarController.selectedIndex = 0U;
[self.tabBarController setTitle:[nextData display_name]];
[self.tabBarController setViewControllers:[nextData loadTabs]];
}
}
loadTabs
是Data类的一个方法(它是一个带有类别的Core Data NSManagedObject子类)。
内部ParentData+Helpers.m
看起来像:
- (NSArray *)loadTabs {
NSMutableArray *mut = [NSMutableArray new];
for (SubData *d in self.datapoints) {
if ([d.field_x isEqual:@YES]) {
[mut addType1:d];
else {
[mut addType2:d];
}
return mut;
}
addType1和addType2在其字段中几乎相同,但具有不同的实现。他们看起来像:
- (TypeVC *)addType1:(SubData *)data {
TypeVC *vc = [[TypeVC alloc] init];
vc.datapoint = data;
return vc;
}
其中TypeVC是Type1或Type2
所以现在我有一个表视图,每个单元格都有一个关联的ParentData,它有一个SubData对象数组。选中后,它会加载带有Type1和Type2 VC的UITabViewController。
在TableVC.m
内:
- (void)- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"toTabs" sender:self];
}
其中toTabs导致故事板中的UITabBarController。
在prepareForSegue中:
UITabBarController presentedTabBarController = [segue destinationViewController];
[presentedTabBarController setTitle:self.selectedTitleName];
[presentedTabBarController setViewControllers:[self.selectedParentData loadTabs]];
所以一切正常。
所以我运行我的应用程序,转到UITabBarController,应该有的东西。第一组标签有2个标签,所以我点击下一个,然后转到第二个标签。我点击下一步,然后加载下一组标签并打开正确的标签。我接下来打得很好。每次它正常工作时我会打四到五次。它的Type1或Type2无关紧要。
然后突然间,我找到了一个有2个标签的特定版本。它加载第一个(索引0处的那个),然后我点击下一个。突然,我在行self.tabBarController.selectedIndex += 1;
处有EXC_BAD_ACCESS(代码= 1,地址= 0xWHATEVER)。我不明白为什么会这样。