我正在開發一個應用程序,使用NSInvocation作爲下面的代碼處理NSTimer。我得到Sigbart以下代碼錯誤*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSInvocation invocationWithMethodSignature:]: method signature argument cannot be nil' *** First throw call stack
iOS:invocationWithMethodSignature方法簽名參數問題
我試圖找出這個崩潰,但無法得到它。有人可以幫我解決這個問題嗎?
代碼:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveImageToPhotoAlbum) name:kImageCapturedSuccessfully object:nil];
NSInvocation *myInvocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(capturePicture:)]];
[myInvocation setSelector:@selector(capturePicture:)];
[myInvocation setTarget:self];
[myInvocation retainArguments];
[NSTimer scheduledTimerWithTimeInterval:5.0 invocation:myInvocation repeats:NO];
-(void) capturePicture :(id) sender
{
NSLog(@"capTureAutoPicture:Scanning image at interval");
// Get all cameras in the application and find the frontal camera.
AVCaptureDevice *backCamera;
NSArray *allCameras = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
// Find the back camera.
for (int i = 0; i < allCameras.count; i++) {
AVCaptureDevice *camera = [allCameras objectAtIndex:i];
if (camera.position == AVCaptureDevicePositionBack) {
backCamera = camera;
}
}
// If we did not find the camera then do not take picture.
if (backCamera != nil) {
// Start the process of getting a picture.
AVCaptureSession *session = [[AVCaptureSession alloc] init];
// Setup instance of input with back camera and add to session.
NSError *error;
AVCaptureDeviceInput *input =
[AVCaptureDeviceInput deviceInputWithDevice:backCamera error:&error];
if (!error && [session canAddInput:input]) {
// Add frontal camera to this session.
[session addInput:input];
// We need to capture still image.
AVCaptureStillImageOutput *output = [[AVCaptureStillImageOutput alloc] init];
// Captured image. settings.
[output setOutputSettings:
[[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,nil]];
if ([session canAddOutput:output])
{
[session addOutput:output];
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in output.connections) {
for (AVCaptureInputPort *port in [connection inputPorts]) {
if ([[port mediaType] isEqual:AVMediaTypeVideo])
{
videoConnection = connection;
break;
}
}
if (videoConnection)
{
break;
}
}
// Finally take the picture
if (videoConnection)
{
[session startRunning];
[output captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error)
{
if (imageDataSampleBuffer != NULL)
{
NSData *imageData = [AVCaptureStillImageOutput
jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *photo = [[UIImage alloc] initWithData:imageData];
//UIImageWriteToSavedPhotosAlbum(photo, nil, nil, nil);
[photo release];
[[NSNotificationCenter defaultCenter] postNotificationName:kImageCapturedSuccessfully object:nil];
[session stopRunning];
}
}];
}
}
[output release];
}
}
}
- (void)saveImageToPhotoAlbum
{
UIImageWriteToSavedPhotosAlbum([self stillImage], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
[self dismissModalViewControllerAnimated:YES];
}
更新的代碼:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveImageToPhotoAlbum) name:kImageCapturedSuccessfully object:nil];
/*NSInvocation *myInvocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(capTureAutoPicture)]];
[myInvocation setSelector:@selector(capTureAutoPicture)];
[myInvocation setTarget:self];
[NSTimer scheduledTimerWithTimeInterval:5.0 invocation:myInvocation repeats:NO];*/
[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(capTureAutoPicture:) userInfo:nil repeats:NO];
你可以發佈'[self methodSignatureForSelector:@selector(capturePicture :)]'的代碼嗎?看起來這種方法並沒有返回你認爲的那樣。 – MishieMoo
我更新了我的代碼,我現在沒有在scheduledTimerWithTimeInterval中使用NSInvocation,但由於此行同樣發生崩潰[[NSNotificationCenter defaultCenter] postNotificationName:kImageCapturedSuccessfully object:nil]; ..有幫助嗎? – Getsy