来自 NSDictionary 的 EXC_BAD_ACCESS

问题描述 投票:0回答:1
NSDictionary *orientation = [NSDictionary dictionaryWithObjectsAndKeys:
        [NSNumber numberWithBool:YES], CIDetectorEyeBlink,
   [NSNumber numberWithInt:imgOrientation], CIDetectorImageOrientation, nil];

我的应用程序在这一行不断崩溃,给出可怕的

EXC_BAD_ACCESS
(代码= 1,地址= 0x0)。我浏览了名为“方向”的
NSDictionary
中的所有内容,它们都是客观的c对象。有谁知道为什么会发生这种情况?任何事情都有帮助,因为我完全迷失了。这是该行所在的整个方法:

-(void)scanFace{

    UIImageOrientation imgOrientation = imgView.image.imageOrientation;
    orientation = [NSDictionary dictionaryWithObjectsAndKeys:
      [NSNumber numberWithBool:YES], CIDetectorEyeBlink, 
   [NSNumber numberWithInt:imgOrientation], CIDetectorImageOrientation, nil];

    CIImage *newImage = [CIImage imageWithCGImage:imgView.image.CGImage
                                       options:orientation];

    CIContext *context = [CIContext contextWithOptions:nil];
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
        context:context options:[NSDictionary
      dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]];

    NSArray *features = [detector featuresInImage:newImage options:orientation];

    if (features.count == 0) {
        NSLog(@"NO FACE %i", features.count);
    } else {
        NSLog(@"FACE FOUND %i", features.count);
    }

    for (CIFaceFeature *feature in features) {

        if (feature.leftEyeClosed == YES) {
            leftLab.text = [NSMutableString stringWithFormat:@"Left Eye Closed"];
        } else {
            leftLab.text = [NSMutableString stringWithFormat:@"Left Eye Open"];
        }
        if (feature.rightEyeClosed == YES) {
            rightLab.text = [NSMutableString stringWithFormat:@"Right Eye Closed"];
        } else {
            rightLab.text = [NSMutableString stringWithFormat:@"Right Eye Open"];
        }

    }
}

这是堆栈跟踪:

0   FaceDetection                       0x000551a7 -[ViewController scanFace] + 66
1   FaceDetection                       0x000550cb __26-[ViewController takePic:]_block_invoke_2 + 282
2   libdispatch.dylib                   0x3c6ac793 <redacted> + 10
3   libdispatch.dylib                   0x3c6ac5db <redacted> + 22
4   libdispatch.dylib                   0x3c6afe45 _dispatch_main_queue_callback_4CF + 228
5   CoreFoundation                      0x3456b1b1 <redacted> + 1288
6   CoreFoundation                      0x344de23d CFRunLoopRunSpecific + 356
7   CoreFoundation                      0x344de0c9 CFRunLoopRunInMode + 104
8   GraphicsServices                    0x380bd33b GSEventRunModal + 74
9   UIKit                               0x363fa2b9 UIApplicationMain + 1120
10  FaceDetection                       0x00055e41 main + 116
11  libdyld.dylib                       0x3c6bfb20 <redacted> + 0
ios objective-c cocoa-touch nsdictionary nsnumber
1个回答
2
投票

请注意,CIDetectorEyeBlink出现在iOS 7中!

如果您尝试在旧版本中使用此密钥,您将得到 EXC_BAD_ACCESS,因为它未定义。

从iOS7开始,这段代码片段不会有问题。

© www.soinside.com 2019 - 2024. All rights reserved.