我有一个来自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