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

  情况一:地理编码

    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之外的框架,必须手动在项目中导入.

 

转载于:https://www.cnblogs.com/wronganswer/p/6288241.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 代码的基础框架通常由以下几个部分构成: 1. 导入所需的库和模块。这些可能包括标准库、第三方库、自定义模块等。 2. 定义常量和全局变量。常量是不可更改的量,而全局变量是在程序的整个生命周期内可以被更改的量。 3. 定义函数。函数是一组封装的代码,可以在程序的不同位置调用,以执行特定的任务。 4. 定义类。类是一组封装的代码和数据,可以用来创建对象,通常用于模拟实际世界的概念。 5. 定义主函数。主函数是程序的入口,也是程序开始执行的地方。 基础框架可能会有所不同,具体取决于程序的需求和目标。但通常情况下,以上几个部分都会在某种形式中出现。 ### 回答2: 构成我代码基础框架的主要组成部分包括模块划分、数据结构设计、函数和类的定义、以及异常处理机制。 首先,模块划分是程序开发的关键。它将代码按照不同的功能模块进行划分,使得代码结构清晰、易于维护。每个模块负责完成特定的功能,模块之间可以进行交互和调用,提高代码的重用性。 其次,数据结构设计是构成代码基础的关键组成部分之一。根据实际需求,选择合适的数据结构来存储和处理数据,提高代码的执行效率。常用的数据结构包括数组、链表、栈、队列、集合、字典等。 函数和类的定义是构建代码基础框架不可或缺的一部分。函数可以将一系列的代码逻辑封装成一个可重用的模块,提高代码的可读性和维护性。类是一种更高级的数据结构,通过封装属性和方法,实现代码的面向对象编程,提供更灵活的代码组织结构和功能管理方式。 异常处理机制是代码基础框架中的一项重要内容。通过捕获和处理异常,可以使程序在发生错误时有更好的容错性和健壮性,防止程序崩溃或出现不可预料的错误。 综上所述,构成我代码的基础框架主要由模块划分、数据结构设计、函数和类的定义、以及异常处理机制组成。这些组成部分相互配合,使得代码结构清晰、易于拓展和维护,提高代码的可读性和执行效率。 ### 回答3: 构成我的代码基础框架主要包括以下几个方面: 1. 模块组织结构:我会将代码按照不同的功能和模块进行组织,通过模块化的方式来提高代码的可读性和可维护性。通常会使用包管理工具,比如npm或者yarn,来管理代码的依赖关系。 2. 设计模式:在代码的设计过程中,我会考虑使用一些常见的设计模式,比如工厂模式、单例模式、观察者模式等,来提高代码的灵活性和可扩展性。 3. 错误处理:在编写代码时,我会考虑使用适当的错误处理机制,比如try-catch语句来捕获和处理可能发生的错误。同时,我会使用日志记录工具来记录程序运行时的错误信息,以便进行问题排查和修复。 4. 代码规范:我注重代码的可读性和良好的编码习惯,会遵循一些通用的代码规范,比如使用驼峰命名法、适当的缩进、注释等,以提高代码的可维护性。 5. 测试驱动开发(TDD):我会积极采用测试驱动开发的方法来编写代码,即先编写测试用例,再编写能够通过测试的代码,以确保代码的正确性和健壮性。 6. 版本控制:我会使用Git等版本控制工具来管理代码的版本,以便于多人协作和代码的版本追踪。 总之,我在编写代码时会考虑以上这些方面,通过良好的代码结构和规范,以及适当的设计模式和错误处理机制,来构建一个高效、可靠且易于维护的代码基础框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值