obj-c 项目错误中的 PagingMenuController swift 库

Posted

技术标签:

【中文标题】obj-c 项目错误中的 PagingMenuController swift 库【英文标题】:PagingMenuController swift library in obj-c project error 【发布时间】:2016-06-06 08:20:29 【问题描述】:

在我的objective-c 项目中,我曾经使用PageMenu 库进行用户友好的导航,但我注意到无限的menuScrollView 和居中的选定菜单项看起来比默认的PageMenu 漂亮得多。

当我找到PagingMenuController 时,我尝试将这个 swift 库导入到 obj-c 项目中。一切似乎都很好,正确创建了头文件,授予了对 PagingMeniController 类方法的访问权限。

但是当我尝试使用视图控制器数组初始化 PagingMenuController 类时:

#import "moyoutlet-Swift.h"

UIViewController* vc = [[UIViewController alloc] init];
vc.view.backgroundColor = [UIColor redColor];
vc.menuItemDescription = @"vc";

UIViewController* vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor whiteColor];
vc1.menuItemDescription = @"vc1";

NSArray* arr = [NSArray arrayWithObjects:vc,vc1, nil];

PagingMenuController* pvc = [[PagingMenuController alloc] initWithViewControllers:arr];

[self.view addSubview:pvc.view];

xcode 在 MenuItemView.swift 的方法中显示错误

calculateLabelSize(label: UILabel, windowSize: CGSize = UIApplication.sharedApplication().keyWindow!.bounds.size) 

致命错误:在展开 Optional 时意外发现 nil 价值

似乎 UIApplication.sharedApplication().keyWindow!.bounds.size 返回 nil。

你怎么看,这个错误的原因在哪里?

【问题讨论】:

【参考方案1】:

正如Acecilia 所说,this discussion 中描述了问题,解决方案是在 -(void)viewDidAppear 中制作所有内容,例如:

-(void)viewDidAppear:(BOOL)animated 

     [super viewDidAppear:animated];

      UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

      FirstViewController* fvc = [sb instantiateViewControllerWithIdentifier:@"FirstViewController"];
      fvc.title = @"First View Controller";
      fvc.view.backgroundColor = [UIColor grayColor];

      SecondViewController* svc = [sb instantiateViewControllerWithIdentifier:@"SecondViewController"];
      svc.title = @"Second View Controller";
      svc.view.backgroundColor = [UIColor lightGrayColor];

      PagingMenuController* pvc = [[PagingMenuController alloc] initWithViewControllers:@[fvc,svc]];

     [self addChildViewController:pvc];
     [self.view addSubview:pvc.view]; 

我创建了example project 来展示它的工作原理。

【讨论】:

以上是关于obj-c 项目错误中的 PagingMenuController swift 库的主要内容,如果未能解决你的问题,请参考以下文章

理解 Obj-C 中的 UITabBarController 子类初始化代码

sonarqube 混合 obj-c swift 项目,如何扫描代码覆盖率

Obj-C 中的 HTTP 多部分请求

如何从 obj-c / ios 中的堆栈跟踪中获取源代码行

Obj-C 的 Swift 桥接头

Obj-C 的 Swift 桥接头