iOS開(kāi)發(fā)遇到Crash: [__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance

前言:相對(duì)于有一定開(kāi)發(fā)經(jīng)驗(yàn)的猿,這樣的奔潰是比較好定位和解決的。

  • 問(wèn)題復(fù)現(xiàn):當(dāng)我寫(xiě)了這樣一段代碼時(shí)運(yùn)行時(shí)
NSArray *name = @[@"kobe",@"rose",@"jack"];
NSDictionary *dict = @{@"name":name, @"wilson":@"8"};

// 有時(shí)候后臺(tái)會(huì)告訴我們,我這里會(huì)給你返回一個(gè)字典,你盡管這么取值就好了。但實(shí)際卻并不是這樣??
NSDictionary *testDict = dict[@"name"];
NSString *test = testDict[@"testName"];
NSLog(@"%@",test);

// 奔潰日志
[__NSArrayI objectForKeyedSubscript:]: unrecognized selector sent to instance 0x60000024fb40
Terminating app due to uncaught exception 'NSInvalidArgumentException'
reason: '-[__NSArrayI objectForKeyedSubscript:]: unrecognized selector sent to instance 0x60000024fb40'

從日志我們得到,對(duì)一個(gè)數(shù)組使用了objectForKeye方式取值,編譯器識(shí)別不了,拋出異常。

  • 解決:需要做一層安全行判斷:
id testDict = dict[@"name"];
if ([testDict isKindOfClass:[NSDictionary class]]) {
    NSString *test = testDict[@"testName"];
    NSLog(@"%@",test);
}

我們平時(shí)寫(xiě)代碼時(shí),需要注意對(duì)數(shù)據(jù)類(lèi)型的判斷,防止類(lèi)似情況發(fā)生奔潰。在與后臺(tái)協(xié)調(diào)好數(shù)據(jù)結(jié)構(gòu)的前提下,還需要盡可能做一些安全性測(cè)試,比如數(shù)組或字典為空會(huì)不會(huì)崩潰?這都需要大量的代碼積累,開(kāi)發(fā)之路路漫漫兮。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,150評(píng)論 25 708
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,569評(píng)論 0 13
  • 同學(xué)們: 大家好! 上個(gè)月我參加了第二屆廣東祠堂文化研討會(huì),對(duì)祠堂有了一點(diǎn)認(rèn)識(shí),今天給大家聊一下。 廣州有豐富的民...
    閑蛋俠閱讀 758評(píng)論 0 2
  • 當(dāng)產(chǎn)品團(tuán)隊(duì)走完第一階段和第二階段的流程后(這里簡(jiǎn)化了第二階段的流程),就進(jìn)入視覺(jué)稿設(shè)計(jì)階段,此階段產(chǎn)品會(huì)受到來(lái)自設(shè)...
    羅摩_職業(yè)產(chǎn)品人閱讀 400評(píng)論 0 0

友情鏈接更多精彩內(nèi)容