2014-09-26 11 views
17

आईओएस 8 की तस्वीरें.फ्रेमवर्क में, मैं यूआईएममेज को उपयोगकर्ता की फोटो लाइब्रेरी में सहेजने की कोशिश कर रहा हूं, वैसे ही आप सफारी में एक छवि को लंबे समय से दबा सकते हैं और "छवि सहेजें" चुन सकते हैं। आईओएस 7 में, यह केवल एलास्सेट लाइब्रेरी के writeImageToSavedPhotosAlbum:metadata:completionBlock पर कॉल करके होगा।कौन सी PHAssetCollection एक छवि को बचाने के लिए उपयोग करने के लिए?

आईओएस 8 के लिए हमें एक पीएएसएससेट जोड़ने के लिए एक संपत्ति संग्रह लेने की आवश्यकता है, लेकिन मुझे पता नहीं चल सकता कि कौन सा PHAssetCollection उपयोगकर्ता के "कैमरा रोल" को सहेजने के करीब है (भले ही कोई नहीं है, वास्तव में, iOS 8 में)

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHAssetChangeRequest *newAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image]; 
    newAssetRequest.creationDate = time; 
    newAssetRequest.location = location; 

    PHObjectPlaceholder *placeholderAsset = newAssetRequest.placeholderForCreatedAsset; 

    PHAssetCollectionChangeRequest *addAssetRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:WHICH_ASSET_COLLECTION]; 
    addAssetRequest addAssets:@[placeholderAsset]; 

} completionHandler:^(BOOL success, NSError *error) { 
    NSLog(@"Success: %d", success); 
}]; 

मैं "हाल में जोड़ी" स्मार्ट एल्बम को एक्सेस करने की कोशिश की है, लेकिन यह यह करने के लिए नई सामग्री जोड़ने की अनुमति नहीं है।

उत्तर

29

आपको PHAssetCollection के साथ गड़बड़ करने की आवश्यकता नहीं है। बस करके:

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
     PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:<#your photo here#>]; 
    } completionHandler:^(BOOL success, NSError *error) { 
     if (success) { 
      <#your completion code here#> 
     } 
     else { 
      <#figure out what went wrong#> 
     } 
    }]; 
+0

पूरा करने वाले हैंडलर में, आप नई संपत्ति कैसे प्राप्त करते हैं? –

+1

दस्तावेज़ों के मुताबिक, आप '@property (nonatomic, strong, readonly) PHObjectPlaceholder * placeholderForCreatedAsset' का उपयोग करते हैं, "इस संपत्ति का उपयोग करें यदि आपको उसी परिवर्तन ब्लॉक में परिवर्तन अनुरोध द्वारा बनाई गई संपत्ति का संदर्भ देने की आवश्यकता है। उदाहरण के लिए, निम्न कोड, जब एक फोटो लाइब्रेरी में परिवर्तन ब्लॉक में शामिल होता है, तो एक संपत्ति बनाता है और फिर उसे संग्रह में जोड़ता है: " प्लेसहोल्डर पर अधिक जानकारी के लिए, मैं सुझाव देता हूं [डॉक्स] (https://developer.apple.com /library/prerelease/ios/documentation/Photos/Reference/PHObjectPlaceholder_Class/index.html) उस पर। –

+0

मैंने पहले ही प्लेसहोल्डर ऑब्जेक्ट की कोशिश की है। उदाहरण प्लेसहोल्डर ऑब्जेक्ट को एल्बम परिवर्तन अनुरोध में जोड़ता है, लेकिन मैं संपत्तियों की एक सरणी बनाए रखता हूं। सरणी में प्लेसहोल्डर ऑब्जेक्ट जोड़ना काम नहीं करता था। –

6

असल में 8.1 में कैमरा रोल वापस आ गया है। यह स्मार्ट एल्बम है जिसका उप प्रकार SmartAlbumUserLibrary है।

+0

आपने जिस तरह से प्लेसहोल्डर के लिए है, उसे समझकर, आपने बहुत अच्छा किया है। – matt

+0

मुझे लगता है कि अगर वह इसे 'अलास्सेट कोलेक्शन' में जोड़ने का प्रयास कर रहा था, तो यह अभी भी पढ़ा जाएगा और इसे जोड़ने में सक्षम नहीं होगा। बस इसे मेरे उत्तर में जोड़ने जैसा वह चाहता है। –

+0

@ सुशीग्रास जैकोब कैमरा रोल लिखने योग्य है। – matt

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