-2

我有这个:

NSMutableArray *tableData;
NSMutableArray *thumbnails;
NSMutableArray *prepTime;


NSString *path = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
tableData = (NSMutableArray *)[dict objectForKey:@"RecipeName"];
thumbnails = (NSMutableArray *)[dict objectForKey:@"Thumbnail"];
prepTime = (NSMutableArray *)[dict objectForKey:@"PrepTime"];

我想这样做:

- (void)tableView:(UITableView *)tableView commitEditingStyle:    
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableData removeObjectAtIndex:indexPath.row];
    [thumbnails removeObjectAtIndex:indexPath.row];
    [tableData removeObjectAtIndex:indexPath.row];
    [tableView reloadData];
}

但它失败了:

2013-10-14 16:58:22.202 SimpleTable[8421:11303] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[__NSCFArray removeObjectAtIndex:]:发送到不可变对象的变异方法”*第一次抛出调用堆栈: (0x1c93012 0x10d0e7e 0x1c92deb 0x1d13c4f 0x29bd 0xd0d34 0x20e97b 0x10e4705 0x182c0 0x18258 0xd9021 0xd957f 0xd9056 0x2a9f4d 0x10e4705 0x182c0 0x18258 0xd9021 0xd957f 0xd86e8 0x47cef 0x47f02 0x25d4a 0x17698 0x1beedf9 0x1beead0 0x1c08bf5 0x1c08962 0x1c39bb6 0x1c38f44 0x1c38e1b 0x1bed7e3 0x1bed668 0x14ffc 0x1ced 0x1c15) libc++abi.dylib: terminate called throwing an exception

如何正确地将字典制作成 mutableArray?

4

3 回答 3

4

[[dict objectForKey:@"RecipeName"] mutableCopy] 应该可以解决问题!

编辑:您可能必须像这样 [(NSarray *)[dict objectForKey:@"RecipeName"] mutableCopy]

于 2013-10-14T14:03:19.970 回答
2

感谢 Kris Gellci,这确实起到了作用:

tableData = [[dict objectForKey:@"RecipeName"] mutableCopy];
thumbnails = [[dict objectForKey:@"Thumbnail"] mutableCopy];
prepTime = [[dict objectForKey:@"PrepTime"] mutableCopy];
于 2013-10-14T14:07:49.823 回答
1

在您的代码中,您从 tableData 中删除了两次对象

    [tableData removeObjectAtIndex:indexPath.row];

我应该关注,

- (void)tableView:(UITableView *)tableView commitEditingStyle:   
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    [tableData removeObjectAtIndex:indexPath.row];
    [thumbnails removeObjectAtIndex:indexPath.row];
    [prepTime removeObjectAtIndex:indexPath.row];
    [tableView reloadData]; 
}
于 2013-10-14T14:03:38.733 回答