0

Hi guys I have an issue with a flashlight app. I have a button to turn on/off the flash. Also I the viewdidload turn on the app. When I press the home button and then click on my app again the app dont turn on the flashlight so I have used the applicationDidBecomeActive. This method turn on the flash but if I click on the button to turn it off the app is crashing.

this is the appdelegate.m:

- (void)applicationDidBecomeActive:(UIApplication *)application{
    Just_A_LightViewController *mvc = [[Just_A_LightViewController alloc] init];
    [mvc toggleFlashlight];
    [mvc release];
}

and this is the viewcontroller.m:

- (void)toggleFlashlight{
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    NSLog(@"toggle");

if ([device hasTorch] && [device hasFlash]){
    NSLog(@"torch and flash");

    if (device.torchMode == AVCaptureTorchModeOff) {
        AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];

        AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];


        AVCaptureSession *session = [[AVCaptureSession alloc] init];

        [session beginConfiguration];

        [device lockForConfiguration:nil];

        [device setTorchMode:AVCaptureTorchModeOn];

        [device setFlashMode:AVCaptureFlashModeOn];

        [session addInput:flashInput];

        [session addOutput:output];

        [device unlockForConfiguration];

        [output release];

        [session commitConfiguration];

        [session startRunning];

        [self setAVSession:session];
        [session release];
        NSLog(@"toggle true");

    }
    else 
    {
        NSLog(@"toggle false");
        [AVSession stopRunning];
        [AVSession release], AVSession = nil;}
}
}

#pragma mark - View lifecycle


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [self toggleFlashlight];
    [super viewDidLoad];

}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (IBAction)buttonPressed:(id)sender{
    NSLog(@"button");
[self toggleFlashlight];

}

The nslogs is for troubleshooting. After pressing the home button and relaunching the app even if the flash is turned off the console shows the "toggle false" What I am doing wrong here? Crashlog:

Sun Mar 13 23:00:05 unknown ReportCrash[313] <Notice>: Formulating crash report for process mediaserverd[21]
Sun Mar 13 23:00:06 unknown ReportCrash[313] <Error>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/mediaserverd_2011-03-13-230005_TheMaster.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0
Sun Mar 13 23:00:06 unknown com.apple.launchd[1] <Warning>: (com.apple.mediaserverd) Job appears to have crashed: Bus error
Sun Mar 13 23:00:06 unknown mediaserverd[314] <Notice>: MS:Notice: Installing: (null) [mediaserverd] (550.52)
Sun Mar 13 23:00:06 unknown mediaserverd[314] <Notice>: MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/WinterBoard.dylib
Sun Mar 13 23:00:06 unknown mediaserverd[314] <Warning>: WB:Notice: WinterBoard
Sun Mar 13 23:00:06 unknown com.apple.mediaserverd[314] <Notice>: MS:Warning: message not found [UIImage defaultDesktopImage]
occulus
  • 16,959
  • 6
  • 53
  • 76
user622203
  • 149
  • 6
  • 20

1 Answers1

0

Not sure if this is causing your issue, but it might be relevant:

Your toggleFlashlight method is doing too much each time you toggle -- it's doing setup each time which only needs to be done once. More details in the example here:

Turn on torch/flash on iPhone

See the answer by iWasRobbed. So try doing the setup stuff only once, and then when you need to toggle, call setTorchMode and setFlashMode as shown in that example.

Community
  • 1
  • 1
occulus
  • 16,959
  • 6
  • 53
  • 76
  • thanks for the advice but I cant figure out how to split this code. any suggestions? – user622203 Mar 13 '11 at 22:31
  • Just edited my answer to make the hyperlink more obvious, as it was a bit unobvious. Can you see iWasRobbed's answer at that link? It's pretty self-explanatory if you see what his strategy was. – occulus Mar 13 '11 at 23:50