我正在与其他团队合作开发应用程序,另一个团队向我部署了一个框架。 然后将那些框架导入到我的应用中。
我尝试使用我的测试设备进行构建,它们在上述设备上的iPhone 8 Plus(iOS 11),iPhone 7 Plus(iOS 10),两个iPhone X(iOS 11),iPhone Pro(iOS 11)也可以正常工作。
但不适用于iPhone 5c(iOS 9.3)iPad Mini 1(iOS 9.3)。它们仅在第一次使用Xcode构建时才起作用,断开电缆连接,第二次打开应用程序后,它总是在启动映像后崩溃。
appdelegate.h中的代码
@property (strong, nonatomic) FrameworkViewController *InfoVC;
@property (strong, nonatomic) MyNavigationViewController *conNav;
我的appdelegate.m中的初始化代码
NSBundle *myframeworkBundle = [NSBundle bundleForClass:[FrameworkManager class]];
InfoVC = [[FrameworkViewController alloc]initWithNibName:@"FrameworkViewController" bundle:myframeworkBundle];
conNav = [[MyNavigationViewController alloc] initWithRootViewController:InfoVC];
InfoVC.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:@"leftMenu_icon.png"] style:UIBarButtonItemStylePlain
target:self
action:@selector(myfunction:)];
conNav.tabBarItem.title=@"TAP_Information";
conNav.tabBarItem.image=[UIImage imageNamed:@"tab_info.png"];
我添加了一个断点,并使那些iPhone 5c和Mini 1的InfoVC返回零。 但是那些工程设备会显示一个地址。而且我认为infoVC为nil,我尝试将leftbarButtonItem设置为nil对象以导致崩溃,但是如何解决此问题?我尝试添加main_queue似乎不起作用。
-------------更新-------------
我尝试添加一些NSLog来查看那些nil对象,并且我发现NSlog可以打印出有效地址,该nil是由应用崩溃导致的。 现在,它仅在iOS 9设备上随机崩溃。所有崩溃都是EXC_BAD_ACCESS(代码= 1,地址= 0x0)。
答案 0 :(得分:1)
如果提供了.framework
文件,建议您使用以下功能之一搜索NSBundle:
+ (NSBundle *)bundleWithIdentifier:(NSString *)identifier
+ (instancetype)bundleWithPath:(NSString *)path
如documentation中所述:
框架和插件通常使用此方法在运行时定位其自己的捆绑软件。该方法可能比尝试使用bundleForClass:方法查找捆绑软件更有效。但是,如果对具有指定标识符的已加载并缓存的包的初始查找失败,则此方法将使用可能耗时的启发式方法来尝试查找包。作为一种优化,可以使用bundleWithPath:或bundleWithURL:方法来避免遍历文件系统。