2011-03-30 18 views
8

Estoy tomando una foto con mi aplicación, se llama al método de delegado, la imagen se guarda en la biblioteca, pero tengo un error en el registro:iPhone - falla al guardar una imagen de la cámara en el álbum de iPhone

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSInvocation invocationWithMethodSignature:]: method signature argument cannot be nil' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x33ac0987 __exceptionPreprocess + 114 
    1 libobjc.A.dylib      0x3347b49d objc_exception_throw + 24 
    2 CoreFoundation      0x33a6b05d +[NSInvocation invocationWithMethodSignature:] + 340 
    3 PhotoLibrary      0x3038da11 __-[PLAssetsSaver _createWriteImageCompletionBlockWithImage:target:selector:contextInfo:]_block_invoke_1 + 96 
    4 PhotoLibrary      0x3038d7cd __-[PLAssetsSaver _saveImage:imageData:properties:completionBlock:]_block_invoke_2 + 56 
    5 PhotoLibrary      0x3038de87 __-[PLAssetsSaver queueJobData:requestEnqueuedBlock:completionBlock:imagePort:previewImagePort:]_block_invoke_2 + 122 
    6 libSystem.B.dylib     0x33c32680 _dispatch_call_block_and_release + 20 
    7 libSystem.B.dylib     0x33c32e38 _dispatch_main_queue_callback_4CF + 220 
    8 CoreFoundation      0x33a482ab __CFRunLoopRun + 1334 
    9 CoreFoundation      0x33a47c87 CFRunLoopRunSpecific + 230 
    10 CoreFoundation      0x33a47b8f CFRunLoopRunInMode + 58 
    11 GraphicsServices     0x33b0e4ab GSEventRunModal + 114 
    12 GraphicsServices     0x33b0e557 GSEventRun + 62 
    13 UIKit        0x32099329 -[UIApplication _run] + 412 
    14 UIKit        0x32096e93 UIApplicationMain + 670 
    15 MySoPrettyApp      0x00002737 main + 82 
    16 MySoPrettyApp      0x000026e0 start + 40 
) 
terminate called after throwing an instance of 'NSException' 

Mi código es el siguiente:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIImage *pickedImage = [[info objectForKey:UIImagePickerControllerOriginalImage] retain]; 
    UIImageWriteToSavedPhotosAlbum (pickedImage, self, @selector(photoSaved:::), nil); 
} 

-(void)photoSaved:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo { 
    if(!error){ 
     NSLog(@"Photo saved to library!"); 
    } else{ 
     NSLog(@"Saving failed :("); 
    } 
} 

pickedImage no es nula.
método El photoSaved se declara en el .h
También probé con @selector (photoSaved :) y @selector (photoSaved).

¿Cuál es el problema?

Respuesta

8

La forma correcta para conseguir el selector es el siguiente, ya que los nombres de argumentos son también una parte del nombre del método:

@selector(photoSaved:didFinishSavingWithError:contextInfo:) 
+0

Gracias, yo no no lo sé Lo siento por mi pereza esta noche por una pregunta tan simple. – Oliver

4

Trate de esta manera:

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 
{ 
    if(!error){ 
     NSLog(@"Photo saved to library!"); 
    } 
    else{ 
    NSLog(@"Saving failed :("); 
    } 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *pickedImage = [[info objectForKey:UIImagePickerControllerOriginalImage] retain]; 
    UIImageWriteToSavedPhotosAlbum(pickedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
} 
+0

Gracias por su respuesta – Oliver

+0

No hay problema. Buena suerte con tu proyecto. – Dmacpro

+0

Gracias, hombre, también resolvió mi problema. – user366584

Cuestiones relacionadas