从 NSMutableArray 中删除项目时应用程序崩溃,但仅当满足某些条件时
App crashing when deleting item from NSMutableArray, but only when certain conditions are met
我有一个用 Objective-C
编写的应用程序,它需要显示 UITable
个数字。数字列表取自 NSMutableArray
,其信息取自 .plist 文件。通常,一切都很好。
但是,该应用包含以特定方式组织数字的设置。默认设置只是按字母顺序组织它们。下一个组织它们与默认相反。这两个设置没问题。当一个人通过拆分奇数和偶数数字来选择组织table的设置时,就会出现问题。这是拆分它们的代码:
for (int i = 0; i < [tempGeneralSorterArray count]; i++)
{
NSString *tempHouseNumber = [[tempGeneralSorterArray objectAtIndex:i] stringByTrimmingCharactersInSet:letters];
int tempHouseNumberValue = [tempHouseNumber intValue];
if (tempHouseNumberValue % 2 == 0) //% is the modulo operator, shows what's left after a division
{
//even
[tempEvenSorterArray addObject:[tempGeneralSorterArray objectAtIndex:i]];
[tempEvenSorterArray sortUsingSelector:@selector(compare:)];
}
else
{
//odd
[tempOddSorterArray addObject:[tempGeneralSorterArray objectAtIndex:i]];
[tempOddSorterArray sortUsingSelector:@selector(compare:)];
}
}
在此之后,应用程序根据所选设置以不同方式组合两个数组(tempOddSorterArray 和 tempEvenSorterArray),但通常如下所示:
customerArray = [tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray];
table 大部分显示正常,但当我尝试删除单元格时,出现错误。它在这一行崩溃:
[customerArray removeObjectAtIndex:indexPath.row];
我在调试器中得到这个:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x7fae62410f30'
如有任何帮助,我们将不胜感激,如果需要,我很乐意提供更多信息或代码。
另外,这里使用的数组都是NSMutable数组。
虽然 customerArray 已声明为可变数组,但 [tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray] return 是一个不可变数组。尝试像 [[tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray]mutableCopy] 那样修改它;让我知道它是否有效。 :)
结果是
customerArray = [tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray];
returns 一个新的 NSArray 实例,但不是 NSMutableArray 实例。而你需要一个 NSMutableArray 类型的实例来调用它的 removeObject 方法。
您可以通过在收到 NSArray 后调用方法 mutableCopy 来实现此目的。您可以这样做:
customerArray = [[tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray] mutableCopy];
[customerArray removeObjectAtIndex:indexPath.row];
您也可以尝试以下方法,@Droppy 声称这是更有效的方法,
NSMutableArray * customerArray;
[customerArray addObjectsFromArray: tempEvenSorterArray];
我有一个用 Objective-C
编写的应用程序,它需要显示 UITable
个数字。数字列表取自 NSMutableArray
,其信息取自 .plist 文件。通常,一切都很好。
但是,该应用包含以特定方式组织数字的设置。默认设置只是按字母顺序组织它们。下一个组织它们与默认相反。这两个设置没问题。当一个人通过拆分奇数和偶数数字来选择组织table的设置时,就会出现问题。这是拆分它们的代码:
for (int i = 0; i < [tempGeneralSorterArray count]; i++)
{
NSString *tempHouseNumber = [[tempGeneralSorterArray objectAtIndex:i] stringByTrimmingCharactersInSet:letters];
int tempHouseNumberValue = [tempHouseNumber intValue];
if (tempHouseNumberValue % 2 == 0) //% is the modulo operator, shows what's left after a division
{
//even
[tempEvenSorterArray addObject:[tempGeneralSorterArray objectAtIndex:i]];
[tempEvenSorterArray sortUsingSelector:@selector(compare:)];
}
else
{
//odd
[tempOddSorterArray addObject:[tempGeneralSorterArray objectAtIndex:i]];
[tempOddSorterArray sortUsingSelector:@selector(compare:)];
}
}
在此之后,应用程序根据所选设置以不同方式组合两个数组(tempOddSorterArray 和 tempEvenSorterArray),但通常如下所示:
customerArray = [tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray];
table 大部分显示正常,但当我尝试删除单元格时,出现错误。它在这一行崩溃:
[customerArray removeObjectAtIndex:indexPath.row];
我在调试器中得到这个:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x7fae62410f30'
如有任何帮助,我们将不胜感激,如果需要,我很乐意提供更多信息或代码。
另外,这里使用的数组都是NSMutable数组。
虽然 customerArray 已声明为可变数组,但 [tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray] return 是一个不可变数组。尝试像 [[tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray]mutableCopy] 那样修改它;让我知道它是否有效。 :)
结果是
customerArray = [tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray];
returns 一个新的 NSArray 实例,但不是 NSMutableArray 实例。而你需要一个 NSMutableArray 类型的实例来调用它的 removeObject 方法。 您可以通过在收到 NSArray 后调用方法 mutableCopy 来实现此目的。您可以这样做:
customerArray = [[tempOddSorterArray arrayByAddingObjectsFromArray:tempEvenSorterArray] mutableCopy];
[customerArray removeObjectAtIndex:indexPath.row];
您也可以尝试以下方法,@Droppy 声称这是更有效的方法,
NSMutableArray * customerArray;
[customerArray addObjectsFromArray: tempEvenSorterArray];