由于GPUImageAverageColor块

时间:2017-01-14 02:22:51

标签: objective-c

我的应用程序提前退出后,我在控制台中收到以下消息,因为它以NSException类型的未捕获异常终止。

  

*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [__ NSArrayM objectAtIndex:]:索引25超出空数组的边界'

这是我的代码:

NSMutableArray *redValues = [NSMutableArray array];
NSUInteger redValuesLength = [redValues count];
float totalOne, diffForAverage;
int amount = 1;
__block int counter = 0;
NSInteger j;

GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

GPUImageAverageColor *averageColor = [[GPUImageAverageColor alloc] init];
[averageColor setColorAverageProcessingFinishedBlock:^(CGFloat redComponent, CGFloat greenComponent, CGFloat blueComponent, CGFloat alphaComponent, CMTime frameTime)
 { 
     NSLog(@"%f", redComponent);
     [redValues addObject:@(redComponent * 255)];
 }];

[videoCamera addTarget:averageColor];
[videoCamera startCameraCapture];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 27 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [videoCamera stopCameraCapture];
});

totalOne = [redValues[25] floatValue];
float average = totalOne / amount;

for (j = (counter + 25); j < (redValuesLength - 25); j++)
{
    diffForAverage = average - [redValues[j + 1] floatValue];

    if (diffForAverage > -1 && diffForAverage < 1)
    {
        totalOne += [redValues[j + 1] floatValue];
        amount++;
        [arrayOne addObject:[NSNumber numberWithInt:(j - 25)]];
        counter++;
    }

    else
    {
        if (arrayOneLength >= 15)
        {
            break;
            counter++;
        }

        else
        {
            [arrayOne removeAllObjects];
            totalOne = [redValues[j + 1] floatValue];
            counter++;
        }
    }
}

我理解我收到的错误消息意味着我的redValues数组是空的,但我正在尝试访问和操作后面的元素。我怎么解决这个问题?我知道我的GPUImageAverageColorBlock正确地打印红色值,但似乎这些值没有像我想要的那样被推送到数组中。

0 个答案:

没有答案