2012-04-14 26 views
7

Estoy tratando de desarrollar una aplicación que pueda descargar imágenes (desde un sitio de fotografía) y crear un ALAsset para cada imagen y luego ubicarlas en un nuevo ALAssetsGroup.Cómo crear un nuevo ALAsset desde la imagen descargada

Soy capaz de crear un nuevo álbum (ALAssetsGroup) y descargar datos del sitio web. Sin embargo, estoy un poco atascado sobre cómo crear el nuevo ALAsset.

He tratado es el siguiente

  ALAsset *asset = [[[ALAsset alloc] init] autorelease]; 
      NSDictionary *metadata = [NSDictionary dictionaryWithObjectsAndKeys:p.id, @"id", p.thumbnail_url, @"thumbnail_url", p.photo_url, @"photo_url", nil]; 
      [asset setImageData:data metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) { 
       ESLog(@"Asset %@ created error:%@", assetURL, error); 
       [group addAsset:asset]; 
      }]; 

Sin embargo consigo impresiones donde tanto el assetURL y error es vacía.

2012-04-15 02:58:06.850 XXXXXX.com[5966:c607] Asset (null) created error:(null) 

Sería muy bueno si alguien puede sugerir cómo puedo crear un nuevo activo en un álbum

Respuesta

6

usted no puede crear un nuevo ALAsset así. Lo que hay que hacer es guardar los datos de imagen a la Foto-biblioteca con el método:

- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock 

El bloque de finalización devolverá el NSURL para el nuevo activo creado. Usando el método

- (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock 

con el NSURL le devolverá la instancia de ALAsset del activo recién creado.

Saludos.

Hendrik

+0

Gracias, esto es como terminé haciéndolo. – mithuntnt

1

Usted puede utilizar la función UIImageWriteToSavedPhotosAlbum para guardar el UIImage al vuelco de la cámara.

void UIImageWriteToSavedPhotosAlbum (
    UIImage *image, 
    id  completionTarget, 
    SEL  completionSelector, 
    void  *contextInfo 
); 

Se describe here.

Luego puede recogerlo en la biblioteca de activos.

1

Incluso más fácil utilizar el siguiente código:

//Save to photo album 
    UIImage *img = [[[UIImage alloc] initWithData:imageData] autorelease]; 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library writeImageToSavedPhotosAlbum:img.CGImage 
           metadata:[info objectForKey:UIImagePickerControllerMediaMetadata] 
          completionBlock:^(NSURL *assetURL, NSError *error) { 
           NSLog(@"assetURL %@", assetURL); 
          }]; 
+0

esto es exactamente lo que estoy haciendo pero assetURL es nulo ... –

Cuestiones relacionadas