Tôi nhận được ngoại lệ sau khi tìm cách xóa đối tượng khỏi NSMutableDictionary. Mã có liên quan sau. Các 'cài đặt' được chuyển cho phương pháp và có thể là một NSDictionary hoặc một NSMutableDictionary.Xóa đối tượng khỏi từ điển có thể thay đổi sẽ ném ngoại lệ
NSMutableDictionary *mutableSettings = nil;
if ([settings isKindOfClass:[NSMutableDictionary class]])
mutableSettings = (NSMutableDictionary *)settings;
else
mutableSettings = [[[NSMutableDictionary alloc] initWithDictionary:settings] autorelease];
[mutableSettings removeObjectForKey:@"akey"];
này bị treo với
* Chấm dứt ứng dụng do ngoại lệ còn tự do 'NSInternalInconsistencyException', lý do: '- [__ NSCFDictionary removeObjectForKey:]: Phương pháp biến đổi gửi đến đối tượng bất biến'
Có vấn đề gì với điều này? Cảm ơn.
Ngoài ra, như dấu gạch dưới ngụ ý, '__NSCFDictionary' là một lớp riêng tư. Nó không nhất thiết phải là lớp từ điển duy nhất, và nó không được đảm bảo là mãi mãi. Quan trọng hơn, nó là một phân lớp của NSMutableDictionary, vì vậy * mỗi * từ điển (đó là một thể hiện của '__NSCFDictionary') là một loại NSMutableDictionary. Tất cả những điều này có nghĩa là không có cách nào đáng tin cậy để nói liệu một từ điển hay bất kỳ đối tượng plist nào khác — có thể thay đổi được hay không. –