リリース構成で実行しているときにエラーが発生しました。これは、ローカル変数のリリースが早すぎるようですtmp
。
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible.'
関連コード:
@property (nonatomic, strong) NSIndexPath *selectedCellIndexPath;
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (_selectedCellIndexPath != nil && [_selectedCellIndexPath isEqual:indexPath]) {
self.selectedCellIndexPath = nil;
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (_selectedCellIndexPath != nil && ![_selectedCellIndexPath isEqual:indexPath]) {
//--- problematic code
NSIndexPath *tmp = _selectedCellIndexPath;
self.selectedCellIndexPath = indexPath;
[tableView reloadRowsAtIndexPaths:@[tmp, _selectedCellIndexPath] withRowAnimation:UITableViewRowAnimationFade];
//--- problematic code
} else {
self.selectedCellIndexPath = indexPath;
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
tmp
ここでローカル変数を強く参照する必要があるという印象を受けましたか、それとも正しくありませんか?
ところで、コードをに変更します
NSIndexPath *tmp = self.selectedCellIndexPath;
または変更する
@[tmp, _selectedCellIndexPath]
問題を[NSArray arrayWithObjects:tmp,_selectedCellIndexPath,nil]
修正します。
ここで何がうまくいかないのか説明は何でしょうか?