gpt4 book ai didi

iphone - 排序数组不会删除我想要的

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:09 25 4
gpt4 key购买 nike

我有一个排序的 NSMutableArray,它工作得很好,尽管当我尝试删除一个对象时它使应用程序崩溃,然后当我重新加载应用程序时它没有删除正确的对象。

我知道这是因为现在这是一个排序数组,因为在我实现此功能之前它工作正常,但我不知道如何修复它。

这是我用来从数组中删除内容的代码:

- (void) tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if ( editingStyle == UITableViewCellEditingStyleDelete ) {
Patient *thisPatient = [patients objectAtIndex:indexPath.row];
[patients removeObjectAtIndex:indexPath.row];
if (patients.count == 0) {
[super setEditing:NO animated:YES];
[self.tableView setEditing:NO animated:YES];
}
[self deletePatientFromDatabase:thisPatient.patientid];
[tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
}
}

在这一行停止:

[tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];

这是我用来对数组进行排序的代码:

-(void) processForTableView:(NSMutableArray *)items {

for (Patient *thisPatient in items) {
NSString *firstCharacter = [thisPatient.patientName substringToIndex:1];
if (![charIndex containsObject:firstCharacter]) {
[charIndex addObject:firstCharacter];
[charCount setObject:[NSNumber numberWithInt:1] forKey:firstCharacter];
} else {
[charCount setObject:[NSNumber numberWithInt:[[charCount objectForKey:firstCharacter] intValue] + 1] forKey:firstCharacter];
}
}
charIndex = (NSMutableArray *) [charIndex sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
}
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"cell"];
NSString *letter = [charIndex objectAtIndex:[indexPath section]];
NSPredicate *search = [NSPredicate predicateWithFormat:@"patientName beginswith[cd] %@", letter];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"patientName" ascending:YES];

NSArray *filteredArray = [[patients filteredArrayUsingPredicate:search] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
if ( nil == cell ) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}

NSLog(@"indexPath.row = %d, patients.count = %d", indexPath.row, patients.count);
Patient *thisPatient = [filteredArray objectAtIndex:[indexPath row]];
cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", thisPatient.patientName, thisPatient.patientSurname];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.textColor = [UIColor blackColor];
if (self.editing) {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
return cell;
}

我怀疑这是对数组进行排序时发生的很常见的事情,尽管它可能不是。

请说明是否需要更多代码

最佳答案

这不一定是因为您的数组已排序,而是因为您从中填充表格的数组与您从中删除对象的数组不同。

您在哪里对 patients 数组进行排序?是对实际的 patients 数组进行排序,还是您在 tableView 委托(delegate)方法中对其进行排序而不是实际对 patients 进行排序?

原因是您删除的对象的索引与实际 patients 数组中的索引不同(因为一个已排序,一个未排序)。因此,它首先删除了错误的对象,然后它崩溃了,因为 tableView 期望删除一个对象(以便它可以为要删除的单元格设置动画)但错误的对象被删除了。

关于iphone - 排序数组不会删除我想要的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18301590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com