我有一個來自JSON提要的字典數組。這填充UITableView
。當用戶選擇一行時,我使用UITableViewCellAccessoryCheckmark
,並且我試圖修改該行內數組中的字典,因此當滾動後再次使用該單元格時它保持正確。但是,我收到一個錯誤。這裏是我的代碼(簡稱爲清楚起見):從UITableView中的行選擇更新數組中的字典
JSON數據的方法:
+ (NSMutableArray *)parseKennelData:(NSString *)type userID:(NSString *)user dogID:(NSString *)dog terms:(NSString *)terms
{
NSURL *searchURL=[NSURL URLWithString:searchLocation];
// download and parse the JSON
NSData *JSONData = [[[NSData alloc] initWithContentsOfURL:searchURL] autorelease ];
NSError *error=nil;
CJSONDeserializer *deserializer = [CJSONDeserializer deserializer];
NSMutableDictionary *JSONdictionary =[deserializer deserializeAsDictionary:JSONData error:&error];
NSMutableArray *allResults = [JSONdictionary valueForKey:@"kennel"];
return allResults;
}
視圖控制器:
interface
{
NSMutableArray *results;
}
- (void)viewDidLoad
{
// data for search
self.results=[JSONData parseKennelData:@"search" userID:@"demo" dogID:@"" terms:self.terms];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableDictionary *rowData = [self.results objectAtIndex:[indexPath row]];
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
if (thisCell.accessoryType == UITableViewCellAccessoryNone)
{
thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
thisCell.accessoryView = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"tick-button.png"]];
[rowData setObject:@"demo" forKey:@"user_id" ];
}
else
{
thisCell.accessoryType = UITableViewCellAccessoryNone;
thisCell.accessoryView = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"plusbutton.png"]];
[rowData setObject:@"" forKey:@"user_id"];
}
[self.results replaceObjectAtIndex:[indexPath row] withObject:rowData];
}
我得到一個SIGABRT錯誤:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
我thoug我確信所有的東西都是可變的,所以我看不出它在哪裏掉下來。
感謝
你肯定** ** deserializeAsDictionary回報一個可變的字典? – 2012-03-08 17:57:06