不导入框架为什么有时崩溃有时不崩溃

  情况一:地理编码

    storyboard:

    

    

  代码如下(项目并未导入MapKit框架,但运行程序并不崩溃):

      

 1 #import "ViewController.h"
 2 #import <CoreLocation/CoreLocation.h>
 3
 4 @interface ViewController ()
 5 @property (weak, nonatomic) IBOutlet UITextField *addressTF;
 6 @property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;
 7 @property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;
 8 @property (weak, nonatomic) IBOutlet UILabel *detailLabel;
 9
10 @end
11
12 @implementation ViewController
13
14 - (void)viewDidLoad {
15     [super viewDidLoad];
16     // Do any additional setup after loading the view, typically from a nib.
17 }
18
19 //地理编码
20 - (IBAction)geocode {
21     //创建地理编码对象
22     CLGeocoder * geocoder = [[CLGeocoder alloc]init];
23
24     if (self.addressTF.text == nil) {
25         return ;
26     }
27
28     [geocoder geocodeAddressString:self.addressTF.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
29         if (error) {
30             NSLog(@"%@",error);
31             return ;
32         }
33         //获取地标 CLPlacemark
34         for (CLPlacemark * placemark in placemarks) {
35             self.longitudeLabel.text = [NSString stringWithFormat:@"%f",placemark.location.coordinate.longitude];
36             self.latitudeLabel.text = [NSString stringWithFormat:@"%f",placemark.location.coordinate.latitude];
37             self.detailLabel.text = placemark.name;//具体地名
38             NSLog(@"%@",placemark.locality);//城市名
39         }
40
41     }];
42
43
44 }
45
46 @end

  情况二:添加地图View

    storyboard:

  

  代码(项目没有导入框架,但程序崩溃):

 1 #import "ViewController.h"
 2 #import <MapKit/MapKit.h>
 3
 4 @interface ViewController ()
 5
 6 @end
 7
 8 @implementation ViewController
 9
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12     // Do any additional setup after loading the view, typically from a nib.
13 }
14
15
16 - (void)didReceiveMemoryWarning {
17     [super didReceiveMemoryWarning];
18     // Dispose of any resources that can be recreated.
19 }
20
21
22 @end

  程序崩溃报错:

  *** Terminating app due to uncaught exception ‘NSInvalidUnarchiveOperationException‘, reason: ‘Could not instantiate class named MKMapView‘

  导入MapKit框架后,则能成功运行.

 

  为什么有的时候崩溃而有的时候不会?

  因为在XCode5之后,在你#import <MapKit/MapKit.h>之后,程序默认帮助程序员导入框架.但由于情景二中程序运行后,先走的是storyboard中箭头指向的控制器,发现有MKMapView控件,而程序那时候还没有自动导入框架,所以崩溃. 而情景一中,storyboard中的控件并没有涉及到任何相关的控件,而是在代码中导入了头文件之后才使用了CoreLocation相关的方法,那个时候程序已经自动帮我们导入了框架,所以不会崩溃.

  所以,只要在storyboard的中使用了UIKit之外的框架,必须手动在项目中导入.

不导入框架为什么有时崩溃有时不崩溃

时间: 2024-10-23 11:39:11

不导入框架为什么有时崩溃有时不崩溃的相关文章

Xcode6下新建XMPP项目导入框架详解

1.xcode版本 2.xmpp 版本: https://github.com/robbiehanson/XMPPFramework 开始导入框架:(最好先在show in finder里面建立文件夹,再把xmpp框架里的东西拷贝到刚建立的文件夹,再把这些文件夹拖入工程) 第一步:先导入Vendor里面的东西 1.先导入Vendor(这里是xmpp所依赖的第三方库)文件夹里面的CocoaLumberjack.不需要添加别的库文件,编译成功. 2.再导入 CocoaAsyncSocket(xmpp

Intellij自动导入框架包(黑科技)

忽然发现intellij尽然可以自动导入 框架所需的包,而且可以选择jar包版本,瞬间发现Maven,gradle管理jar包还得写配置文件弱爆了. 以Hibernate为例: 1.ProjectStructure下点击“+” 2.添加hibernate框架 3.会看到下方有Fix,点击后有神奇的事情 5.或者是这里也可以

利用“崩溃轨迹”分析崩溃

?更多技术干货请戳:听云博客 “崩溃,严重伤害用户的情感,严重损害用户体验,罪恶行径简直令人发指,特请xx狮.xx猿火速缉拿案犯归案,刻不容缓,钦此.” 虽然在“听云App”等类似优秀工具的帮助下,大多数的崩溃都能快速的.轻易的定位问题,如图: 上图所示,已经定位到某源文件的某行,再加上崩溃message,崩溃的原因就显而易见了. 但有些崩溃的原因就不是那么显而易见了,往往需要寻找更多蛛丝马迹来定位问题,要不然也谈不上什么“分析”了. 本文用两个例子说明“崩溃轨迹”在分析崩溃过程中的重要作用.

eclipse 导入框架app 报错

Android导入源码packages 中的apps出错 下载完源码后再linux 中编译框架中的app模块是不会出错的,但是加载到eclipse就会有很多错误. Google 给用户提供的SDK 都是阉割版本的 无法使用隐藏的API,如果想要使用系统API 比如import android.os.AsyncResult; 首先需要下载源码,然后编译.编译完成后 在out/target/common/obj/JAVA_LIBRARIES/framework_intermediates 中把cla

iOS的CocoaPods手动挡到自动挡到导入第三方框架

iOS的CocoaPods手动挡到自动挡到导入第三方框架 CocoaPods使用 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要 使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况.总之小编的意思就是,手动一个个去下载所需 类库十分麻烦.另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦.如果能有什么工具能解

iOS的CocoaPods手动挡到自动挡到导入第三方框架 转发

CocoaPods使用 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要 使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况.总之小编的意思就是,手动一个个去下载所需 类库十分麻烦.另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦.如果能有什么工具能解决这些恼人的 问题,那将“善莫大焉”.所以,你需要 Coc

1.导入XMPP框架

新建一个文件夹Vendor,将其 日志跟踪 CocoaLumberjack 网络通讯 CocoaAsyncSocket 这个框架需要导入框架:CFNetwork.framework 网络 Security.framework 数据加密 数据解析 KissXML  也需要导入框架:libxml2.dylib 修改项目属性 在Build Settings 旁查找sear Search Paths 中 Header Search Paths 属性中command + 方向右键= 将光标移到末尾 ,按A

iOS_导入libxml2.2框架后,找不到&lt;libxml/tree.h&gt;的解决办法

由于用到了第三方Html解析类库Hpple, 在导入框架libxml2.2.dylib后, 最到了XCode仍然找不到<libxml/tree.h>的情况, 最后解决过程如下: 1.项目-Targets中的Build Phases, 找到Link Binary With Libraries, 点击"+",添加 "libxml2.dylib" 2.同样的,切换到Buiild Settings的tab里, 通过搜索,找到"Linking"

ios xmppFramework框架的导入步骤和介绍

一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 第一种方法直接拖 1> 拖入文件夹 在网盘链接的xmppFramework文件夹 :http://pan.baidu.com/s/1jGxLa3G 也可以直接去github搜索下载. 2>  拖入Sample_XMPPFramework.h,重命名为XMPPFramework.h 3>  添加框架 CFNetwork.framew