1. 程式人生 > >iOS-資料返回欄位null、導致的程式crash問題解決

iOS-資料返回欄位null、導致的程式crash問題解決

在iOS開發過程中經常需要與伺服器進行資料處理,但是在資料接通過程中會出現:null “”等問題導致莫名其妙的崩潰。相信你一定會寫各種判斷來處理這些異常,甚至你還會一個一個介面的去改,折讓我們實在是心灰意冷。

再者可能你會寫個分類 調它。這樣也會讓你非常的苦惱!

最近發現一個比較好的解決方法:前提是你用的是AFNetworking第三方。
設定下面屬性:

serializer.removesKeysWithNullValues = YES;

在哪裡設定呢?搜尋AFURLResponseSerialization.m類,在定位到AFJSONResponseSerializer類,如下圖:

這裡寫圖片描述

然後定位:AFJSONObjectByRemovingKeysWithNullValues

static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) {
    if ([JSONObject isKindOfClass:[NSArray class]]) {
        NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]];
        for
(id value in (NSArray *)JSONObject) { [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; } return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; } else if ([JSONObject isKindOfClass:[NSDictionary
class]]) { NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; for (id <NSCopying> key in [(NSDictionary *)JSONObject allKeys]) { id value = (NSDictionary *)JSONObject[key]; if (!value || [value isEqual:[NSNull null]]) { //這裡是本庫作者的原始碼 //[mutableDictionary removeObjectForKey:key]; //下面是改動後的,將空指標型別改為空字串 mutableDictionary[key] = @""; } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); } } return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; } return JSONObject; }

修改部分就是將空指標value改為空字串。

如果你沒有用AF也沒有關係下面我們來看看這個終極解決的辦法:
終於找到了一勞永逸的方案,牛逼的老外寫了一個Category,叫做NullSafe ,在執行時操作,把這個討厭的空值置為nil,而nil是安全的,可以向nil物件傳送任何message而不會奔潰。這個category使用起來非常方便,只要加入到了工程中就可以了,你其他的什麼都不用做,對,就是這麼簡單。詳細的請去Github上檢視;
解壓檔案之後,直接將NullSafe.m檔案匯入到專案中就行了。

這裡寫圖片描述

但是第二種方法不知道是不是已經有AFNetworking的緣故,我自行倒入後發現沒有效果,可能是和AFNetworking衝突的緣故吧。

相關推薦

iOS-資料返回null導致程式crash問題解決

在iOS開發過程中經常需要與伺服器進行資料處理,但是在資料接通過程中會出現:null “”等問題導致莫名其妙的崩潰。相信你一定會寫各種判斷來處理這些異常,甚至你還會一個一個介面的去改,折讓我們實在是心灰意冷。 再者可能你會寫個分類 調它。這樣也會讓你非常的苦惱

PDO 查詢mysql返回整型變為String型解決方法

版權宣告:本文為博主原創文章,未經博主允許不得轉載。如需轉載可私信或關注公眾號fdipzone-idea與我聯絡。 https://blog.csdn.net/fdipzone/article/details/46702965 PDO 查詢mysql返回欄位整型變為String型解決方法 使用P

phpmysql查詢當天,查詢本週,查詢本月的資料例項(是時間戳)

mysql查詢當天,查詢本週,查詢本月的資料例項(欄位是時間戳) //其中 video 是表名; //createtime 是欄位; // //資料庫time欄位為時間戳 // //查詢當天: $start = date('Y-m-d 00:00:00'); $end = date('Y-m-d

【規範建議】服務端介面返回型別與iOS端的解析

一、本文件的寫作目的   App需要跟產品、UI、後臺、伺服器、測試打交道,app的產出是其他端人員產出的綜合體現。與其他端人員溝通就像是開發寫介面,也就是面向介面程式設計的思想。   本文件講解針對的是服務端返回資料時使用的欄位資料型別如何選擇、iOS端將JSON資料轉模型的時候用什麼型別來定義對應的屬

MFC獲取SqlServer資料庫所有表記錄資料

程式碼如下過程其實不是每一步都有,但是主要功能都在! //1、連線資料庫類 BOOL CSqlDlg::Ado(CString strConn) { ::CoInitialize(NULL); // 初始化OLE/COM庫環境 try { m_pConn.CreateInstan

elasticsearch中的綜合查詢 (指定返回, 過濾條件排序每頁展示條數)

{ "_source": ["write_date"], "query":{"match_all": {}}, "sort": [ { "datedb": { "order": "desc" } } ], "from"

Oracle 查詢庫中所有表名名說明,查詢表的資料條數表名中文表名

查詢所有表名: select t.table_name from user_tables t; 查詢所有欄位名: select t.column_name from user_col_comments t; 查詢指定表的所有欄位名: select t.column_nam

Hibernate使用原生SQL多表查詢時名相同導致查詢資料覆蓋問題解決辦法

系統測試環境: MySQL 5.0 Hibernate 3.3 由於使用了hibernate,雖然使用原生SQL繞過了hibernate自己的封裝,但是還是有些影響,比如欄位別名問題;相同的欄位名經過hibernate查詢會出現前一列覆蓋後一列的情況,這時可以用 方法來

[]Oracle]查詢表中每隔是否主鍵,查詢表名主鍵資料型別是否為空和註釋

select    utc.column_name as 欄位名,utc.data_type 資料型別,utc.data_length 最大長度,CASE utc.nullable WHEN 'N' THEN '否' ELSE '是' END 可空,utc.data_defa

Oracle 資料查詢表名說明

查詢所有表名:select t.table_name from user_tables t;查詢所有欄位名:select t.column_name from user_col_comments t;查詢指定表的所有欄位名:select t.column_name from user_col_comments

django--orm關係(ForeignKeyOneToOneFieldManyToManyField)詳解

django中的關係欄位 1、ForeignKey欄位,即外來鍵欄位,對應一對多的情況,列如:一本書對應一個出版社,一個出版社可對應多本書。 2、ManyToManyFiled欄位,即多對多欄位,對應資料庫中一個數據相互可以對應多條,列如:一本書可以有多個作者,一個作者可以有多本書 3、OneToOneFi

資料庫工作筆記010---Mysql中用SQL增加刪除,修改型別註釋,調整順序總結

  JAVA技術交流QQ群:170933152   Mysql中用SQL增加、刪除欄位,修改欄位名、欄位型別、註釋,調整欄位順序總結   在網站重構中,通常會進行資料結構的修改,所以新增,刪除,增加mysql表的欄位是難免的,有時為了方便,還會增加

如何修改帶索引的的長度,檢視刪除索引,修改屬性建立索引!

需要重新建立索引,因為長度不同會認為是兩個不同的所索引。 建立和刪除索引 索引的建立可以在CREATE TABLE語句中進行,也可以單獨用CREATE INDEX或ALTER TABLE來給表增加索引。刪除索引可以利用ALTER TABLE或DROP INDEX語句來實現。 (1)使用ALTER T

java生成mysql資料庫建表語句型別註釋,可實現不用mysqldump備份資料庫

使用 mysqldump 備份資料庫也是可行的,因為每次備份的時候都需要mysqldump這個檔案, 我在windows備份時沒問題,但是放到linux上面時,centos系統死活不認這個檔案,但又不想裝mysql,一氣之下自己研究了個不需要mysqldump就可以備份的程式, 如果看了以下程式

mysql 初體驗 -----(資料的增刪改查)

上篇隨筆說到了如何去安裝和 DOS命令 一些最簡單的操作,以及如何去鍵一個數據庫和如何建表。   這次接著來談mysql 裡資料和欄位的增刪改查 有增刪改查就會有資料型別以及資料型別的屬性 mysql資料型別和資料屬性有很多,先接觸一些最基本和最實用的的。   mysql 資料

Fiddler statistics 資料統計解釋

 Fiddler作為代理時,以win7使用者開啟瀏覽器上網為例,一個請求資料的流向大體如下圖所示: 【客戶端(瀏覽器)  <-->  win7系統網際網路服務 WinInet  <--> Fiddler  <--> &nb

Django資料模型--整理

一、欄位 1.CharField: 欄位資料型別為字串 class Test(models.Model): test = models.CharField(max_length=) 2.IntegerField: 欄位資料型別為整形 3.BooleanFi

利用arcpy實現arcgis中欄自動編號(pycharm匯入arcpy站點包,建立更新與寫值)

一、問題來源 今天看到群裡有一個小夥伴,要實現這樣的一個功能,來看一下他的提問: 問下各位大神,如果圖層裡面有2000個小班,我需要將這2000小班在屬性表裡面編號依次為1 2 3 4……1998 1999 2000該怎麼操作呢 。 於是下面有人說可以對欄位的FID操作

Python004-資料處理示例:以某個資料)為基準從資料中獲取不同的行數

資料來源樣式如下所示:   需求: 讀取文字,以第一列為基準參考系,每個基準僅輸出滿足需要條數的資料;不滿足,全部輸出。 比如,基準為 6236683970000018780,輸出條數要求為 5。若文字中含有  6236683970000018780 多於

MySQLNULL,emptystring, ''

在 建表的時候,通常對於字串型別的欄位,會設定為 not null default null ,但是有時一想,盡然 都 not null 了 為啥還要 default null 不是自相矛盾 多此一舉嗎? 1.為啥一般我們都會將欄位設定為 NOT NULL?