我有一个拆分视图控制器,其主视图包含一个选项卡栏控制器,其四个选项卡每个都由单独的“MasterViewController”对象控制,这些对象委托给详细视图:
MasterViewController 类如下:
@interface MasterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate>
@property (strong, nonatomic) IBOutlet UISearchBar *searchBar; // Not pictured above
@property (nonatomic, strong) NSMutableArray *displayData;
@property (nonatomic, strong) NSMutableArray *auditedData;
@property (strong, nonatomic) IBOutlet UITableView *tableView; // Each of the tabs contains a tableview
@property (strong, nonatomic) IBOutlet UITextField *itemCounter;
@end
并初始化如下:
MasterViewController *blahMasterController = (MasterViewController *)tabItem;
blahController.displayData = [[NSMutableArray alloc] init];
blahController.delegate = detailTableViewController;
blahDetailController.recallDelegate = blahController;
功能是,当用户在其中一个选项卡中选择表格行时,相关数据将显示在详细视图控制器中。然后,当用户点击详细视图控制器上的按钮时,主视图选项卡中的条目将被删除。
前者效果很好……后者表现得很奇怪。这是我在 MasterViewController 中的“respondToDetailViewButton”方法(由详细控制器委托的方法):
- (void)respondToDetailViewButton
{
NSLog(@"Class: %@: %@", [self class], self);
NSLog(@"TableView: %@", self.displayMachinesTableView);
NSLog(@"Search Bar:%@", self.searchBar);
}
及其输出:
类:MasterViewController:/MasterViewController:0x105b10a0/
TableView:/UITableView:0xe960c00;帧 = (0 0; 320 395); clipsToBounds = YES; 自动调整大小 = TM+BM;标签 = 1; 手势识别器 = ; 层=/CALayer:0x114b9950/;contentOffset: {0, 0}/
搜索栏: (null)
从上面你可以看到,当细节控制器委托回它的主控时,尽管对 MasterViewController 的 tableView 的引用保持不变,但 searchBar 引用尽管被强属性化,但仍变为 null。
并且 searchBar 在某些时候可验证为非零,因为在 MasterViewController 对象中,didSelectRowAtIndexPath 中的以下调用:
currentScope = [searchBar.scopeButtonTitles objectAtIndex:searchBar.selectedScopeButtonIndex];
NSLog(@"%@", currentScope);
根据我选择的范围呈现“新”或“旧”或“Blah”。
有没有人知道为什么 searchBar 引用根据我提供的内容变为空?提前谢谢了!!