Ожидается "(" до AVCaptureSession - PullRequest
2 голосов
/ 21 ноября 2010

Когда я пытаюсь построить свое приложение, XCode показывает мне эту ошибку

Ожидается "(" до AVCaptureSession

Может кто-нибудь помочь мне исправитьэто предупреждение? Вот мой код:

ViewController.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController : UIViewController
{
}

- (IBAction)SwitchON_Flash;
- (void)setTorchSession:(AVCaptureSession *)CaptureSession;

@end

ViewController.m

#import "ViewController.h"

@implementation ViewController

UIAlertView *NoFlash;

- (IBAction)SwitchON_Flash
{
    AVCaptureDevice *Device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    if ([Device hasTorch] && [Device hasFlash])
    {
        if (Device.torchMode == AVCaptureTorchModeOff)
        {
            AVCaptureDevice *Device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
            AVCaptureDeviceInput *FlashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
            AVCaptureVideoDataOutput *VideoOutput = [[AVCaptureVideoDataOutput alloc] init];
            AVCaptureSession *CaptureSession = [[AVCaptureSession alloc] init];
            [CaptureSession beginConfiguration];
            [CaptureSession addInput:FlashInput];
            [CaptureSession addOutput:VideoOutput];
            [CaptureSession commitConfiguration];
            [CaptureSession startRunning];
            [Device lockForConfiguration:nil];
            [Device setTorchMode:AVCaptureTorchModeOn];
            [Device setFlashMode:AVCaptureFlashModeOn];
            [Device unlockForConfiguration];
            [self setTorchSession:CaptureSession];
            [CaptureSession release];
            [VideoOutput release];
        }

        else
        {
            [torchSession stopRunning];
        }

    }

    else
    {
        NoFlash = [[UIAlertView alloc] initWithTitle:@"Uh-Oh"
                                             message:@"Your device doesn't have a flash camera"
                                            delegate:nil
                                   cancelButtonTitle:@"mhmm, OK"
                                   otherButtonTitles:nil];
        NoFlash.delegate = self;
        [NoFlash show];
        [NoFlash release];          
    }   
    }

- (void)setTorchSession:(AVCaptureSession *)CaptureSession <== /// ERROR HERE ///
{
}

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 ноября 2010

Первый ответ не обязательно правильный, так как вы, возможно, реализовали метод, но просто не объявили его в своем заголовочном файле.

В строке, где вы получаете предупреждение, вы отправляете сообщение для себя (в этом случае ваш контроллер представления) для запуска метода setTorchSession с параметром CaptureSession

При условии, что вы реализовали метод setTorchSessin в своем файле .m, все, что вам нужно сделать, это объявить его в своем интерфейсе (файл .h), добавив следующую строку в свой метод SwitchON_Flash:

- (IBAction)SwitchON_Flash;
- (void)setTorchSession:(AVCaptureDeviceSession*)captureSession;

Если у вас нет метода в файле реализации, ваше приложение завершится с сообщением «Неопознанный селектор отправлен в экземпляр».

1 голос
/ 21 ноября 2010

UIViewController не имеет этого метода по умолчанию. У вас нет реализации этого метода, поэтому он дает вам это предупреждение. Если вы попытаетесь запустить этот код - вы получите ошибку «неизвестный селектор отправлен в экземпляр».

Необходимо либо добавить свойство для torchSession в контроллере представления, либо реализовать этот конкретный метод.

0 голосов
/ 21 ноября 2010

Вы уверены, что класс AVCaptureDeviceSession? Я вообще не могу найти его в справке по XCode.

Может быть, вы имели в виду AVCaptureSession

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...