2013-01-23 15 views
12

für eine App bekommen entwickle ich verwende ich UIImagePickerController ein Bild zu schießen und sie in die Kamera roll:Bild in Kamerarolle speichern und Asset-URL

- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info { 
//... some stuff ... 

     UIImageWriteToSavedPhotosAlbum([info objectForKey:@"UIImagePickerControllerOriginalImage"], nil, nil, nil); 

} 

das Bild gespeichert ist, jetzt muss ich bekomme ich seine Referenz-URL, also versuche ich, die Kamerarolle aufzuzählen und das letzte Bild zu bekommen, aber ich bekomme immer das Bild vor dem, das ich gerade aufgenommen habe.

Hat jemand eine Idee, wie man die Referenz des gerade gespeicherten Bildes bekommt?

Danke, Max

Antwort

12

Diese Lösung soll das Problem beheben:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library writeImageToSavedPhotosAlbum:((UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage]).CGImage 
           metadata:[info objectForKey:UIImagePickerControllerMediaMetadata] 
          completionBlock:^(NSURL *assetURL, NSError *error) { 
           NSLog(@"assetURL %@", assetURL); 
          }]; 

et voila:

assetURL assets-library://asset/asset.JPG?id=1611E84C-24E2-4177-B49A-1C57B4A9C665&ext=JPG 
+0

Können Sie mir etwas mehr darüber, wie Sie das Bild in Kamerarolle speichern ? Ich kann das Bild speichern, aber die Assets URL gibt "null" zurück – Sabarish

+0

Sie müssen Abschlussblock ändern. Im Beispiel über dem Completion-Block wird einfach die Eigenschaft "activeURL" protokolliert. Sie sollte etwa lauten: ALAssentsLibrary * al = [addPhoto defaultAssetsLibrary]; [al AssetForURL: assetURL resultBlock: resultblock failureBlock: Fehlerblock]; wo defaultAssetsLibrary ist: + (ALAssentsLibrary *) defaultAssetsLibrary { statische dispatch_once_t pred = 0; statische ALAssetsLibrary * library = nil; dispatch_once (& pred,^{ library = [[ALAsetsLibrary alloc] init]; }); Rückgabe Bibliothek; } – masgar