1. 程式人生 > >iOS可變陣列新增元素 以及可變陣列操作

iOS可變陣列新增元素 以及可變陣列操作

今天在專案工程中想往可變陣列中新增從伺服器獲取的元素,我用了一下方法:

方法一:

[self.arrM_Data addObjectsFromArray:arr];

方法二:

[self.arrM_DataSource insertObjects:arr atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(self.arrM_DataSource.count, arr.count)]];

方法三:

for (int i=0; i<arr.count; i++) {

       [self.arrM_DataSource insertObject:[arr objectAtIndex:i] atIndex:self.arrM_DataSource.count];

}

但是結果都是一樣的Crash  ,報瞭如下錯誤(不知道是不是我的方法有問題):

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

*** First throw call stack:

(0x281d012 0x1e55e7e 0x281cdeb 0x289d9a5 0x27e1a90 0x27e1893 0x27e1480 0x9d848 0x1e696b0 0x36ecb 0x1e696b0 0x1896035 0x27a0f3f 0x27a096f 0x27c3734 0x27c2f44 0x27c2e1b 0x25717e3 0x2571668 0xd9d65c 0x235a 0x2265)

libc++abi.dylib: terminate called throwing an exception

最後翻看其他網友的解決方案 ,給順利解決了,貼上解決方案:

NSMutableArray *arrM = [[NSMutableArray alloc] init];

[arrM addObjectsFromArray:self.arrM_Data];

[arrM addObjectsFromArray:arr];

self.arrM_Data = arrM;

[arrM release];

NSmutableArray 常用方法總結
array 建立一個空陣列
+(id)arrayWithCapacity:size 建立一個數組,指定容量為size
-(id)initWithCapacity:size 初始化一個新分配的陣列,指定容量為size
-(void)addObject:obj 將物件obj新增到陣列末尾
-(void)insertObject:obj atIndex:i 將物件 obj 插入到索引為 i 的位置
-(void)replaceObject:obj atIndex:i 將陣列中索引為 i 處的元素用obj 置換
-(void)removeObject:obj 從陣列中刪除所有是 obj 的物件
-(void)removeObjectAtIndex:i 從陣列中刪除索引為 i 的對像
-(void)sortUsingSelector:(SEL)selector 用 selector 只是的比較方法將陣列排序