2017-01-11 12 views
11

मुझे एक आईओएस ऐप के लिए एक कैमरा देखें नियंत्रक को लागू करने में कोई समस्या है जो मैं काम कर रहा हूं। जब कोई बटन दबाया जाता है, तो मेरे पास एक सिंगलटन कैमरा ऑब्जेक्ट होता है जो AVFoundation चीजों का पक्ष प्रबंधित करता है और छवि को कैप्चर करता है। जैसा कि आप नीचे देख सकते हैं, एक बार UIImage कैमरे से कब्जा कर लिया गया है, तो मैं इसे पूरा करने वाला एक पूर्ण ब्लॉक पास करता हूं।PHAssetChangeRequest कैमरे के साथ लिया गया UIImage के लिए असफल रहा

नीचे दी गई पहली विधि एक ऐसी क्रिया है जो कैमरे पर कैप्चर बटन दबाए जाने पर आग लगती है। सबसे पहले, कैमरा परत पूर्वावलोकन परत पर कनेक्शन को अक्षम करके रोका जाता है, फिर छवि कैप्चर की जाती है। फिर, कैमरा ऑब्जेक्ट UIImage पर कब्जा करता है, जिस बिंदु पर मैं दृश्य से कैमरा पूर्वावलोकन परत हटा देता हूं और इसके बजाय UIImageView अपनी जगह पर कैप्चर की गई छवि के साथ सबव्यूव जोड़ता हूं।

अगला, मैं फोटो फ्रेमवर्क का उपयोग करके फ़ोटो में बनाई गई एल्बम में छवि जोड़ना चाहता हूं। मैं बिना किसी समस्या के एल्बम बना सकता हूं, और मैंने सत्यापित किया है कि PHAssetCollection ऑब्जेक्ट। मैं दूसरी विधि में उपयोग कर रहा हूँ सही है।

कुछ कारणों से, मैं UIImage को एल्बम में कैप्चर नहीं कर सकता हूं। मैंने अपनी परियोजना में एल्बम में एक यादृच्छिक छवि फ़ाइल जोड़ने की कोशिश की, और ऑपरेशन सफलतापूर्वक पूरा हुआ। मैंने यह भी सत्यापित किया है कि दोनों विधियों में छवि विवरण देखने के लिए NSLog कथन का उपयोग कर सही छवि को addPhotoToSavedPhotos विधि में सफलतापूर्वक पारित किया जा रहा है। इससे मुझे विश्वास होता है कि किसी भी तरह छवि के साथ कुछ गलत है, लेकिन छवि दृश्य इसे सफलतापूर्वक प्रदर्शित करता है, इसलिए मुझे यकीन नहीं है कि यह क्या हो सकता है।

अगर किसी के पास समाधान के बारे में कोई विचार है तो मैं कोशिश कर सकता हूं, मैं इसकी सराहना करता हूं। error.localizedDescriptionNSLog से दूसरे विधि में "The operation couldn't be completed आउटपुट में । (कोको त्रुटि -1)। "

- (IBAction)capturePhoto:(id)sender { 

    [self pauseCameraLayer]; 
    [[eventCamera sharedInstance] captureStillUIImage:^(UIImage *image, NSError *error){ 

     if(error) 
     { 
      NSLog(@"error capturing photo"); 
     } 
     else 
     { 
      NSLog(@"%@",image.debugDescription); 
     } 
     [_captureButton setHidden:YES]; 
     [_switchCameraButton setHidden:YES]; 
     UIImageView *preview=[[UIImageView alloc] initWithImage:image]; 
     [preview setAutoresizesSubviews:YES]; 
     [preview setContentMode:UIViewContentModeScaleAspectFit]; 
     [preview setTransform:CGAffineTransformMakeRotation(M_PI_2)]; 
     preview.frame=_imageView.bounds; 
     [_imageView addSubview:preview]; 
     [self addPhotoToSavedPhotos:[image copy]]; 
     NSLog(@"1: %@",image.description); 
    }]; 

-(void)addPhotoToSavedPhotos:(UIImage*)photo 
{ 
    PHAssetCollection *myCollection=[self getAPPCollection]; 
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
     //Perform changes to photo library 

     PHAssetChangeRequest *req=[PHAssetChangeRequest creationRequestForAssetFromImage:photo]; 
     PHAssetCollectionChangeRequest *assetChangeRequest=[PHAssetCollectionChangeRequest changeRequestForAssetCollection:myCollection]; 
     [assetChangeRequest addAssets:[NSArray arrayWithObject:req.placeholderForCreatedAsset]]; 
     //[libReq addAssets:@[assetPlaceHolder]]; 

    }completionHandler:^(BOOL success, NSError *error){ 
     //Perform any necessary actions after adding the photo to the photo 
     //library 
     if(!success) 
     { 
      NSLog(@"didn't succeed, error: %@",error.localizedDescription); 
     } 
    }]; 
} 
+0

आपको लगता है कि ठीक करते हैं? – kondratyevdev

+0

क्या आप हमें बता सकते हैं क्या लॉग में मुद्रित है? –

+0

यहां कहीं भी एक त्रुटि हो सकती है मुझे लगता है कि स्वयं addPhotoToSavedPhotos: [image copy]]; ब्रेकपॉइंट को जोड़ने का प्रयास करें - (शून्य) addPhotoToSavedPhotos: (UIImage *) फोटो फ़ंक्शन और जांचें कि इस फ़ंक्शन में कोई फ़ोटो पास की जा रही है या नहीं। –

उत्तर

2

wheather एल्बम मौजूद है या नहीं पहले

#import <Photos/Photos.h> 

    - (void)addPhotoToSavedPhotos:(UIImage *)image { 
     NSString *albumName = @"NameOFTheAlbum"; 

     void (^saveBlock)(PHAssetCollection *assetCollection) = ^void(PHAssetCollection *assetCollection) { 
      [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
       PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image]; 
       PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection]; 
       [assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]]; 

      } completionHandler:^(BOOL success, NSError *error) { 
       if (!success) { 
        NSLog(@"Error creating asset: %@", error); 
       } 
      }]; 
     }; 

     PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
     fetchOptions.predicate = [NSPredicate predicateWithFormat:@"localizedTitle = %@", albumName]; 
     PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions]; 
     if (fetchResult.count > 0) { 
      saveBlock(fetchResult.firstObject); 
     } else { 
      __block PHObjectPlaceholder *albumPlaceholder; 
      [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
       PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:albumName]; 
       albumPlaceholder = changeRequest.placeholderForCreatedAssetCollection; 

      } completionHandler:^(BOOL success, NSError *error) { 
       if (success) { 
        PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[albumPlaceholder.localIdentifier] options:nil]; 
        if (fetchResult.count > 0) { 
         saveBlock(fetchResult.firstObject); 
        } 
       } else { 
        NSLog(@"Error creating album: %@", error); 
       } 
      }]; 
     } 
    } 
0

PHAssetChangeRequest एक अनुमति संवाद पॉप इस तरह इस कोड की जांच करें होगा की कोशिश करो। यूआई हमेशा मुख्य में होना चाहिए धागा।

कॉलबैक से बाहर PHAssetChangeRequest ले जाने का प्रयास।

संबंधित मुद्दे