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'
I thoug ht私はすべての私のものが変更可能であることを確かめたので、どこに落ちているのかわかりません。
おかげ
は確かですその** deserializeAsDictionary **リターン変更可能な辞書? –