Ios 主视图中的强属性属性属性在从拆分视图控制器中的详细视图进行回调委派后变为Null

Ios 主视图中的强属性属性属性在从拆分视图控制器中的详细视图进行回调委派后变为Null,ios,objective-c,delegates,Ios,Objective C,Delegates,我有一个拆分视图控制器,主视图包含一个选项卡栏控制器,其四个选项卡分别由单独的“MasterViewController”对象控制,这些对象委托给局部视图: MasterViewController类如下所示: @interface MasterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate> @property (strong,

我有一个拆分视图控制器,主视图包含一个选项卡栏控制器,其四个选项卡分别由单独的“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”方法(由细节控制器委托的方法):

其输出:

类别:MasterViewController:/MasterViewController:0x105b10a0/
TableView:/UITableView:0xe960c00;帧=(0;320 395); clipsToBounds=是;autoresize=TM+BM;标签=1;手势识别器= ; 图层=/CALayer:0x114b9950/;contentOffset: {0,0}/
搜索栏:(空)

从上面可以看出,当详图控制器委托回其主视图时,尽管搜索栏引用具有强属性,但仍然会变为null,尽管对MasterViewController的tableView的引用保持不变

搜索栏在某一点上可验证为非nil,因为在MasterViewController对象中,didSelectRowAtIndexPath中的以下调用:

currentScope = [searchBar.scopeButtonTitles objectAtIndex:searchBar.selectedScopeButtonIndex];
NSLog(@"%@", currentScope);
根据我选择的范围呈现“新”或“旧”或“废话”


根据我提供的内容,有人知道为什么搜索栏引用变为空吗?非常感谢

根据问题下的评论对话,一种可能性是变量命名不一致可能是问题所在。看起来您的实现中可能有“@synthesis-idSearchBar=searchBar;”,因此self.idSearchBar和searchBar实际上是一回事

这个问题是一个名为searchBar的局部变量可能会覆盖您的实例变量。因此,请尝试以下操作:将合成行更改为“@synthesis-idSearchBar=\u-idSearchBar;”,或者完全删除@synthesis行,让编译器自动为您生成准确的行(如果使用LLVM编译器4.0)。将所有显示为错误的搜索栏用法更改为“self.idSearchBar”,以便在整个类中保持一致。搜索栏的任何剩余使用都是不应更改的局部变量


在那之后-你还看到问题了吗?

我不确定还有什么可以补充的,因为这篇文章已经很长了。请询问您认为有助于诊断我的问题的更多详细信息。谢谢idSearchBar属性是否为非零?仅仅因为它在UI中显示,并不意味着IBOutlet连接到了一个指向UISearchBar对象的指针。谢谢您的回复!我在最后更新了我的问题,以验证self.idSearchBar并非始终为零,这并不证明self.idSearchBar为非零。在您的示例中,您使用“searchBar”,我假设它是一个局部变量。这个局部变量是如何初始化的?它的@是从头文件合成的。(在我的项目中,它被称为idSearchBar;我试图使它尽可能一般化,并从这个问题的名称中删除“id”部分,但没有及时将其编辑掉。很抱歉造成混淆)我的类中没有“searchBar”这样的东西。我不小心在“idSearchBar”上复制,忘记删除问题中的id前缀,这让您感到困惑(出于一般性考虑)。所有这些都是“idSearchBar”,是合成的结果。我的类中对idSearchBar.m的所有引用如下:@synthesis idSearchBar
idCurrentScope=[idSearchBar.ScopeButtonTiles对象索引:idSearchBar.selectedScopeButtonIndex]
[IDSearchText的自筛选内容:idSearchBar.text]<这就是字面意思;它不是一个局部变量-它直接来自.h属性中引用的故事板。我不知道如何在注释中添加换行符;我希望你能读到这一点我能想到的唯一一件事就是你能把整节课都发出去。存在的比特和片段,以及一些具有错误变量名称的比特和片段,使得诊断任何问题变得困难。
currentScope = [searchBar.scopeButtonTitles objectAtIndex:searchBar.selectedScopeButtonIndex];
NSLog(@"%@", currentScope);