iOS EXC_BAD_ACCESS(代码= 1,地址= 0x0)仅在iOS 9上崩溃

时间:2018-07-04 08:01:03

标签: ios objective-c

我正在与其他团队合作开发应用程序,另一个团队向我部署了一个框架。 然后将那些框架导入到我的应用中。

我尝试使用我的测试设备进行构建,它们在上述设备上的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)。

Device error log1 Device error log2

1 个答案:

答案 0 :(得分:1)

如果提供了.framework文件,建议您使用以下功能之一搜索NSBundle:

+ (NSBundle *)bundleWithIdentifier:(NSString *)identifier

+ (instancetype)bundleWithPath:(NSString *)path

documentation中所述:

  

框架和插件通常使用此方法在运行时定位其自己的捆绑软件。该方法可能比尝试使用bundleForClass:方法查找捆绑软件更有效。但是,如果对具有指定标识符的已加载并缓存的包的初始查找失败,则此方法将使用可能耗时的启发式方法来尝试查找包。作为一种优化,可以使用bundleWithPath:或bundleWithURL:方法来避免遍历文件系统。