我正在开发一个带有拆分视图控制器的应用程序。master 是标签栏控制器的子类,是拆分视图控制器的委托。该部分似乎工作正常,并且确实将正确的信息推送到详细信息方面——除了拆分视图控制器生成的条形按钮项。
我有一个 UIToolbar,它在 Xcode 中被拖到项目中唯一的细节视图控制器上。我使用 ctrl-drag 在 Xcode 中为公共 API 设置了一个出口。
在公共 API 中还声明了一个 UIBarButtonItem *splitViewBarButtonItem,声明为弱的、非原子的。
这是该项目的设置器:
-(void)setSplitViewBarButtonItem:(UIBarButtonItem *)barButtonItem
{
NSLog(@"%@ setSplitViewBarButtonItem to %@ (%@)",self,barButtonItem,barButtonItem.title);
//UIToolbar *toolbar = [self toolbar];
UIToolbar *toolbar = self.toolbar;
NSLog(@"toolbar[0] before adding the barButtonItem is %@",toolbar.items[0]);
NSMutableArray *toolbarItems = [toolbar.items mutableCopy];
if (_splitViewBarButtonItem)
{
NSLog(@"Removing _splitViewBarButtonItem from toolbarItems");
[toolbarItems removeObject:_splitViewBarButtonItem];
NSLog(@"toolbarItems[0] is %@",toolbarItems[0]);
}
if (barButtonItem)
{
NSLog(@"#####");
NSLog(@"Now adding %@ to toolbarItems",[barButtonItem description]);
[toolbarItems insertObject:barButtonItem atIndex:0];
NSLog(@"toolbarItems[0] is %@",[toolbarItems[0] description]);
NSLog(@"#####");
}
self.toolbar.items = [toolbarItems copy];
NSLog(@"self.toolbar.items[0] is %@",self.toolbar.items[0]);
_splitViewBarButtonItem = barButtonItem;
}
第一次通过时,它的行为符合预期:
2013-04-01 10:33:46.270 SPoT[10389:907] <IViewController: 0x1e066430> setSplitViewBarButtonItem to <UIBarButtonItem: 0x1cd65490> (Text appearing on the button)
2013-04-01 10:33:46.272 SPoT[10389:907] toolbar[0] before adding the barButtonItem is <UIBarButtonItem: 0x1cd65400>
2013-04-01 10:33:46.275 SPoT[10389:907] #####
2013-04-01 10:33:46.277 SPoT[10389:907] Now adding <UIBarButtonItem: 0x1cd65490> to toolbarItems
2013-04-01 10:33:46.278 SPoT[10389:907] toolbarItems[0] is <UIBarButtonItem: 0x1cd65490>
2013-04-01 10:33:46.280 SPoT[10389:907] #####
2013-04-01 10:33:46.288 SPoT[10389:907] self.toolbar.items[0] is <UIBarButtonItem: 0x1cd65490>
但是,如果我使用按钮激活主控,从而使按钮消失并使用主控用新数据刷新详细信息屏幕,则不会传输按钮。我已经将问题追溯到此方法,其中显示按钮可用但未更新。这是第二次运行的调试器输出:
2013-04-01 10:33:53.491 SPoT[10389:907] <IViewController: 0x1e09fad0> setSplitViewBarButtonItem to <UIBarButtonItem: 0x1cd65490> (Text appearing on the button)
2013-04-01 10:33:53.492 SPoT[10389:907] toolbar[0] before adding the barButtonItem is (null)
2013-04-01 10:33:53.493 SPoT[10389:907] #####
2013-04-01 10:33:53.494 SPoT[10389:907] Now adding <UIBarButtonItem: 0x1cd65490> to toolbarItems
2013-04-01 10:33:53.495 SPoT[10389:907] toolbarItems[0] is (null)
2013-04-01 10:33:53.496 SPoT[10389:907] #####
2013-04-01 10:33:53.497 SPoT[10389:907] self.toolbar.items[0] is (null)
请注意,调试器跟踪状态为“现在添加”,因此该项目可用。那么为什么不添加呢?
编辑:现在我在想,由于“添加 barButtonItem 之前的工具栏 [0] 是(null)”,因此生成新细节控制器的对象 id 的 segue 还没有完全创建该对象,具体来说,工具栏属性没有还不存在。我想我必须弄清楚如何在稍后的过程中添加条形按钮项。