首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Objective-C 陣列添加元素崩潰:誤將不可變 NSArray 指派給 NSMutableArray 變數

     編輯:程式設計綜合問答

arrayWithObjects: 回傳不可變 NSArray,若指派給 NSMutableArray 變數再呼叫 addObject:,會因實際物件不支援該方法而崩潰。

錯誤代碼

NSMutableArray *arr = [[NSMutableArray alloc] init];
arr = [NSArray arrayWithObjects:@"a", @"b", nil]; // 實際為 NSArray
[arr addObject:@"c"]; // 崩潰:unrecognized selector

修正方法

  1. 使用可變建構方法:
    arr = [NSMutableArray arrayWithObjects:@"a", @"b", nil];
  2. 或先建立可變陣列再添加:
    arr = [NSMutableArray array]; [arr addObjectsFromArray:@[@"a", @"b"]];

鑑別技巧

  • 編譯期無警告,執行期才崩潰,因變數型別為 NSMutableArray *。
  • 錯誤訊息 unrecognized selector sent to instance 提示實際物件類別缺少方法。
  • 除錯時 po [arr class] 可確認實際類別。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved