1.新建一个PCH文件,在该文件#import的头文件或者编写的代码,在整个项目中都有效

2.在PCH文件中添加以下代码,请按照以下格式进行编写,包括每一行后面的反斜杠

extern NSString * const ManagedObjectContextSaveDidFailNotification;

#define FATAL_CORE_DATA_ERROR(__error__)\

NSLog(@"*** Fatal error in %s:%d\n%@\n%@",\

__FILE__, __LINE__, error, [error userInfo]);\          //在Debug区域显示错误信息

[[NSNotificationCenter defaultCenter] postNotificationName:\    //设置发送NSNotification消息

ManagedObjectContextSaveDidFailNotification object:error];    

3.在AppDelegate.m的didFinishLaunchingWithOptions方法中添加以下代码,让AppDelegate作为以上NSNotification消息的监听者,并在收到该消息时,调用fatalCoreDataError:方法

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fatalCoreDataError:) name:ManagedObjectContextSaveDidFailNotification object:nil];

4.在AppDelegate.m文件中添加以下代码,即弹出窗口让用户知道已经发生错误

-(void)fatalCoreDataError:(NSNotification *)notification

{

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Internal Error", nil) message:NSLocalizedString(@"There was a fatal error in the app and it cannot continue.\n\nPress OK to terminate the app. Sorry for the inconvenience.", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];

[alertView show];

}

PS:以下两步用于找出错误

5.在AppDelegate.m文件中实现UIAlertViewDelegate

@interface AppDelegate () <UIAlertViewDelegate>

@end

6.在AppDelegate.m文件中添加以下代码,当弹出的窗口消失时停止APP运行,并指出错误代码的位置

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

{

abort();

}

7.在AppDelegate.m文件顶部添加以下代码,让该对象了解以上定义的NSNotification消息

NSString * const ManagedObjectContextSaveDidFailNotification = @"ManagedObjectContextSaveDidFailNotification";

8.在每个需要错误处理的地方添加以下代码

NSError *error;

FATAL_CORE_DATA_ERROR(error);

转载于:https://www.cnblogs.com/guitarandcode/p/5572429.html

iOS开发错误处理技巧,PCH文件的使用,自定义NSNotification消息以及设置监听者(以Core Data处理数据时的错误为例)...相关推荐

  1. iOS开发 - OC - PCH文件使用

    一. PCH文件的作用 Xcode中,PCH文件在程序编译的时候会自动包含进去.也就是说PCH中的内容是全局的,可以使用在程序的任何地方,通过这个特性,我们可以概括到PCH的作用有以下几个方面: (1 ...

  2. 【iOS开发-59】LOL案例:单组tabView、alertView样式、实现监听,以及用reloadData数据刷新

    案例效果: (1)先在storyboard中拖拽出一个tableView,然后以下用代码. --tableView继承自scrollView,所以自然有滚动的特性 --最主要的还是数据转模型,以及对c ...

  3. java向数据库插入数据时的错误: Duplicate entry ‘‘ for key ‘PRIMARY‘ 问题解决

    java向数据库插入数据时的错误: Duplicate entry '' for key 'PRIMARY' 问题解决 参考文章: (1)java向数据库插入数据时的错误: Duplicate ent ...

  4. iOS 开发 : 14个技巧助你适配 iOS10

    iOS 开发 : 14个技巧助你适配 iOS10 1.Notification(通知) 自从 Notification 被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 1 ...

  5. iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)

    layout: post #iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) title: iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) #时间配置 d ...

  6. IOS开发基础之绘制饼图、柱状图、自定义进度条

    IOS开发基础之绘制饼图.柱状图.自定义进度条 源码在我的主页里 1.绘制饼图 效果 源码 // LJView.m // 34-绘图饼图 // Created by 鲁军 on 2021/2/23. ...

  7. Kaggle上传数据时出现错误,且不是网络问题

    Kaggle上传数据时出现错误,且不是网络问题 Kaggle上传数据processing 数据时出现错误 Kaggle上传数据processing 数据时出现错误 Kaggle上传数据时,能够上传数据 ...

  8. ios开发 c语言打包.a文件,【转】IOS静态库a文件制作流程

    原文网址:http://www.jianshu.com/p/3439598ea61f 1.新建Cocoa Touch Static Library工程 新建工程 2.Xcode的参数设置 " ...

  9. iOS开发常用的技巧

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPhone Size 手机型号 屏幕 ...

最新文章

  1. 计算机专业申请,申请计算机专业
  2. ie浏览器中 overflow:hidden无作用的解决方案
  3. 组建校园网计算机网络设计,小型校园网的设计与组建Word版
  4. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare
  5. 服务器闰秒 linux,闰秒导致部分 Linux 服务器高 CPU 使用率
  6. pypdf2 存储pdf_PyPDF2:用于PDF文件操作的Python库
  7. 超详细Python进行信用评分卡建模【kaggle的give me some credit数据集】【风控建模】
  8. 光环PMP 串讲冲刺 场景题目分析
  9. 博微三维技术篇【八】——智能CAD识别
  10. 1.8版道士装备取向与PK方法
  11. iPad中国内地商标权诉讼调查
  12. 软考系统集成项目管理工程师模拟题
  13. 通过安卓手机,获取微信小程序包进行反编译方法
  14. Word控件Spire.Doc 【图像形状】教程(11): 如何在 C# 中为 Word 中的图像设置 Transeperant 颜色
  15. 添加完商品后,点货品显示此商品不存在规格,请为其添加规格?
  16. 贝叶斯网络、拉普拉斯平滑
  17. Elixir - Module
  18. Html+Css实现九大行星动画效果
  19. 和GGA的第一次亲密接触
  20. hdu 5445 Food Problem (多重背包)

热门文章

  1. vue import request from ‘@/xxx/xxx‘,@是什么意思怎样配置
  2. CentOS 8安装Redis的两种方式
  3. idea添加添加自动添加版本控制
  4. RedHat6.4安装IBM MQ7.5
  5. (转) Dockerfile 中的 COPY 与 ADD 命令 1
  6. 磁盘格式化(mkfs命令)、磁盘挂载(mount)、手动添加swap
  7. paramiko模块实现堡垒机的思路
  8. STP的根端口与指定端口
  9. openStack 手动部署文档
  10. LINUX下的流量监控shell脚本