我的应用程序支持仅限iPad。 我有UISplitViewController。
左侧菜单
UIViewController
UITableView
UITableViewCell
UILabel
(已添加UITapGestureRecognizer)UIImageView
中心视图
UIViewController
UIView
当用户点击UserName标签时,我显示弹出窗口(左侧菜单 - > Tableview - > Cell - > Label)
所以cellForRowAtIndexPath
方法中的代码如下所示。
__weak LeftMenuUserTCell *weakCell = cell;
cell.didTapProfileOption = ^{
NSLog(@"Option Tapped");
[self showMyProfilePopupFrom:weakCell.lblUserName inView:weakCell.lblUserName.superview];
};
我会像这样提出popover
-(void)showMyProfilePopupFrom:(UIView *)sourceView inView:(UIView *)parentView
{
ListViewController *listView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ListViewController"];
listView.listDelegate=self;
NSArray *optionList=@[@"My Profile",@"Change Password",@"Sign Out"];
listView.dataArray=[optionList mutableCopy];
listView.selectedItemIndex = -1;
listView.listType = 1;
listView.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popover = listView.popoverPresentationController;
listView.preferredContentSize = CGSizeMake(200, 150);
//popover.delegate = self;
popover.sourceView = sourceView;
popover.sourceRect = sourceView.bounds;
popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
[self presentViewController:listView animated:YES completion:nil];
}
直到现在一切正常。
现在我必须默认隐藏左侧菜单,所以我在AppDelegate
中编写了以下代码,我正在设置UISplitViewController
。
self.rootSplitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
当我点击提到的标签时,现在问题是我的应用程序崩溃。我已经检查过,当我注释掉上面一行(UISplitViewControllerDisplayModePrimaryHidden
)时,我的应用程序甚至没有崩溃。
以下是崩溃日志:
MyApp [785:371642]无效模式'kCFRunLoopCommonModes'提供给 CFRunLoopRunSpecific - 打破 _CFRunLoopError_RunCalledWithInvalidMode进行调试。此消息仅在每次执行时出现一次。
MyApp [785:371642] *因未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'* - [__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从中插入nil对象 对象[0]'
在iPad Air上测试(iOS 10.3.3)