Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '* -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
NSDictionary *dict = @{@"Testcase": Testcase, @"TestResult": TestResult, @"Message": Message};
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray insertObject:dict atIndex:TestcaseId];
字面語法 @{key: value} **若任一 value 為 nil,整個字典建立失敗,回傳 nil**。隨後將 nil 字典插入陣列即拋出異常。
NSLog(@"dict = %@", dict); 確認哪個鍵對應 nil。Testcase、TestResult、Message 可能為未初始化的屬性、解析失敗的 JSON 欄位、或資料庫查無結果。#define SafeString(obj) ((obj) ? (obj) : @\"\")
dict = @{@"Testcase": SafeString(Testcase),
@"TestResult": SafeString(TestResult),
@"Message": SafeString(Message)};
NSParameterAssert 開發期攔截NSParameterAssert(Testcase);
NSParameterAssert(TestResult);
NSParameterAssert(Message);
dict = @{@"Testcase": Testcase, @"TestResult": TestResult, @"Message": Message};
- (NSDictionary *)buildDictWithTestcase:(NSString *)tc result:(NSString *)tr msg:(NSString *)msg {
return @{@"Testcase": tc ?: @\"\",
@"TestResult": tr ?: @\"\",
@"Message": msg ?: @\"\"};
}
obj ?: @\"\" 模式統一處理可選字串。記住:字面語法字典不容許 nil value,預先轉換為空字串或拋出斷言,徹底杜絕崩潰。