Tại thời điểm này, bốn người thông minh (không bao gồm bản thân mình) đã chỉ ra rằng bạn đang gửi -removeObjectAtIndex:
đến một đối tượng cho rằng đó là mảng không thể thay đổi. Đây sẽ là thời điểm tốt để bắt đầu tự hỏi lý do tại sao mảng này là không thay đổi khi bạn nghĩ rằng nó có thể thay đổi. Nếu bạn đăng một số mã cho thấy cách mảng được tạo, ai đó ở đây có thể sẽ cho bạn thấy những gì đang xảy ra.
Một cách để bạn có thể kết thúc bằng một mảng không thể thay đổi được khi bạn nghĩ rằng bạn có một mảng có thể thay đổi là sao chép một mảng có thể thay đổi. Ví dụ, bạn có thể có một tài sản:
@property (copy) NSMutableArray *myArray;
Có lẽ bạn sau đó tạo ra một mảng có thể thay đổi, bổ sung một số đối tượng, và gán nó vào tài sản của bạn:
NSMutableArray *tempArray = [NSMutableArray array];
[tempArray addObject:@"You say goodbye"];
[tempArray addObject:@"I say hello"];
self.myArray = tempArray;
Bây giờ, không tempArray điểm đến một mutable mảng hoặc mảng bất biến? Tôi chưa thử nghiệm gần đây, nhưng tôi khá chắc chắn rằng bạn nhận được một mảng bất biến. Bạn chắc chắn nhận được một immutableArray nếu bạn nói:
NSMutableArray *foo = [tempArray copy];
Vì vậy, hãy bắt đầu tìm kiếm các địa điểm trong mã nơi con trỏ mảng được gán lại. Sau khi tất cả, nếu con trỏ của bạn thực sự đã trỏ đến một mảng có thể thay đổi, nó sẽ rất khó để giải thích ngoại lệ mà bạn đang nhận được.
Chỉ cần kiểm tra xem bạn có đang phân bổ và nhập chính xác NSMutableArray không ..Có vẻ như bạn đang suy ra nó như là NSArray (mà doesnt có hàm removeObjectAtIndex) – Krishnabhadra
nó là một NSMuteableArray ... được khởi tạo và khai báo như vậy. – StanLe
xin vui lòng kiểm tra, là mutablearray của bạn là đi ra khỏi phạm vi hoặc đang được gán lại một nơi nào đó trong mã. – Ravin