gpt4 book ai didi

iphone - NSMutableArray 越界

转载 作者:行者123 更新时间:2023-11-28 23:13:40 25 4
gpt4 key购买 nike

我有一段代码,执行时会出现此错误。而且我比较新,我似乎无法解决问题。

错误:2011-09-06 12:31:06.094 ForceGauge[266:707] CoreAnimation:忽略异常:* -[NSMutableArray objectAtIndex:]:索引 1 超出范围 [0 .. 0]

-(void)peakCollector:(NSMutableArray *)testarray {

NSUInteger totalRows = [testarray count];

NSMutableArray *percentArray = [[NSMutableArray alloc]initWithObjects:0, nil];

if(forcecontroller.selectedSegmentIndex==0)
testarray = lbData;
else if(forcecontroller.selectedSegmentIndex==1)
testarray = kgData;
else if(forcecontroller.selectedSegmentIndex ==2)
testarray = ozData;
else if(forcecontroller.selectedSegmentIndex ==3)
testarray = newtonData;

for(int i = 0; i< totalRows-1; i++) {

if ([[testarray objectAtIndex:i+1] doubleValue] >= 1.2 * [[testarray objectAtIndex:i] doubleValue]) {
percentArray = [testarray objectAtIndex:i];

DatabaseTable *tableVC = [[DatabaseTable alloc] initWithStyle:UITableViewStylePlain];
[self.navigationController pushViewController:tableVC animated:YES];

if(forcecontroller.selectedSegmentIndex==0)
[tableVC copydatabase:percentArray];
else if(forcecontroller.selectedSegmentIndex==1)
[tableVC copydatabase:kgData];
else if(forcecontroller.selectedSegmentIndex==2)
[tableVC copydatabase:ozData];
else if(forcecontroller.selectedSegmentIndex==3)
[tableVC copydatabase:newtonData];

[tableVC release];
} else {
[analogData removeAllObjects];
}
}
}

最佳答案

这里有多个问题:

1) NSArrays 只能包含 NSObjects。

在您的代码中,您正在使用 [[NSMutableArray alloc]initWithObjects:0, nil]; 初始化 NSArray,但 0 是原子类型,而不是 NSObject(基本上 0 与 nil 是相同的值(nil 和 NULL 通常等于 0,分别解释为 idvoid* 类型)

您必须将 0 值封装在 NSNumber 中:

[[NSMutableArray alloc]initWithObjects:[NSNumber numberWithInt:0], nil];

然后使用 [percentArray objectAtIndex:0] 检索 NSNumber,最后使用 NSNumberintValue 方法将检索的 NSNumber 转换回 int :

NSNumber* number = [percentArray objectAtIndex:0]; // returns an NSNumber which is an NSObject encapsulating numbers, see Apple's documentation
int val = [number intValue]; // retrieve the integer value encapsulated in the NSNumber
// or directly:
// int val = [[percentArray objectAtIndex:0] intValue];

2) 你得到的异常实际上在别处并且更微妙:你正在检索 [testarray count] 值在 NSUInteger 变量,无符号类型。然后,如果 totalRows 等于 0,totalRows-1 将做一些棘手的事情(考虑到您遇到的异常情况,这显然是这种情况)。

由于totalRows是一个NSUInteger,当它等于0时,totalRows-1不会等于-1,而是... (NSUInteger)-1(-1解释为无符号整数),即0xFFFFFFFF,即NSUInteger类型的最大值!

这就是为什么 i 总是小于这个 totalRows-1 值(因为这个值不是 -1 而是 0xFFFFFFFF = NSUInteger_MAX) .

要解决此问题,请将您的 totalRows 变量转换为 NSInteger 值,或在您的代码中添加条件以单独处理这种特殊情况。

关于iphone - NSMutableArray 越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7323848/

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