2016-04-03 11 views
-2

Ich möchte das letzte in der photoLibrary aufgenommene Foto abrufen und es zu einem Array hinzufügen, das im UIActivivityViewController verwendet wird. Wenn der UIActivityViewController angezeigt wird, wird das Bild nicht angezeigt und es scheint, dass das UIImage nie dem Array hinzugefügt wurde.NSMutableArray gibt nach dem Hinzufügen eines UIImage zum Array nil zurück

Hier ist, was ich habe,

NSMutableArray *items = [[NSMutableArray alloc]init]; 
[items addObject:@"someText"]; 

PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; 
PHAsset *lastAsset = [fetchResult lastObject]; 


__block UIImage *shareImage; 

PHImageRequestOptions* options = [[PHImageRequestOptions alloc]init]; 
options.resizeMode = PHImageRequestOptionsResizeModeExact; 
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; 
options.version = PHImageRequestOptionsVersionUnadjusted; 
options.synchronous = YES; 


[[PHImageManager defaultManager] requestImageForAsset:lastAsset 


    targetSize:PHImageManagerMaximumSize 
    contentMode:PHImageContentModeDefault 
    options:PHImageRequestOptionsVersionCurrent 
    resultHandler:^(UIImage *result, NSDictionary *info) { 

    dispatch_async(dispatch_get_main_queue(), ^{ 



    shareImage = result; 
    [items addObject:shareImage]; }); 



}]; 

NSMutableArray *activityItems = [NSMutableArray arrayWithArray:items]; 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
[self presentViewController:activityViewController animated:YES completion:nil]; 

Jede Hilfe geschätzt wird. Ich bin neu in iOS Dev und Programmierung alle zusammen und ich habe eine sehr harte Zeit mit diesem.

Dank

+1

Ihr Code ist sehr schwer so zu lesen. Bitte fügen Sie es wieder ein und formatieren Sie es so, wie Sie es auf dem Bildschirm sehen. –

+0

Sie haben auch nicht speziell beschrieben, was schief läuft. –

+0

Ok, ich habe den Code angepasst und weitere Details in die Frage eingefügt. Der UIImage wird nicht angezeigt, wenn der UIActivityViewController aufgerufen wird. Es scheint, dass der UIImage nicht zum Array hinzugefügt wird. Danke für die Antwort. – Ro4ch

Antwort

1

der UIImage hinzugefügt wird tatsächlich zu Ihrem items Array. Zu der Zeit erstellen Sie die activityItems Array und präsentieren die UIActivityViewController der Block, der die UIImage hinzugefügt wird, obwohl nicht fertig sein. Wenn Sie die präsentierende Logik in den Block eingefügt haben (nachdem Sie das Bild zum Array hinzugefügt haben), sollte es funktionieren!

- (void)yourMethod { 
    NSMutableArray *items = [[NSMutableArray alloc] init]; 
    [items addObject:@"someText"]; 

    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
    fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 
    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; 
    PHAsset *lastAsset = [fetchResult lastObject]; 

    PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init]; 
    options.resizeMode = PHImageRequestOptionsResizeModeExact; 
    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; 
    options.version = PHImageRequestOptionsVersionUnadjusted; 
    options.synchronous = YES; 

    [[PHImageManager defaultManager] requestImageForAsset:lastAsset 
               targetSize:PHImageManagerMaximumSize 
               contentMode:PHImageContentModeDefault 
                options:PHImageRequestOptionsVersionCurrent 
              resultHandler:^(UIImage *result, NSDictionary *info) { 
               dispatch_async(dispatch_get_main_queue(), ^{ 
                [items addObject:result]; 

                [self presentActivityControllerWithItems:items]; 
               }); 
              }]; 
} 

- (void)presentActivityControllerWithItems:(NSArray *)items { 
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; 
    [self presentViewController:activityViewController animated:YES completion:nil]; 
} 
+0

Genau das habe ich mir auch gedacht. Willst du damit sagen, dass ich den UIActivityViewController unter den [items addObject: shareImage]; ?? Das habe ich gemacht und es hat nicht funktioniert. Danke für die Antwort! – Ro4ch

+0

was erwartest du vom activitycontroller? –

+0

Text (was es mit einem UIImage tut. – Ro4ch