2016-03-25 9 views
5

नहीं पढ़ सकता है मैं निर्दिष्ट फ़ाइल (कैमरा रोल से फोटो) अतुल्यकालिक पढ़ना चाहता हूं, लेकिन यह मेरे लिए काम नहीं करता है।PHAsset सामग्री एसिंक्रोनस

चर tempDatanil तक मैं YES को config requestOptionForPhotos.synchronous बदल जाता है, तो सब कुछ ठीक है, लेकिन मैं इस कोड को तुल्यकालिक प्रदर्शन करने के लिए नहीं करना चाहती।

क्या यह संभव है कि मैं अन्य थ्रेड में उसी फ़ाइल को अनुरोध करके फोटो तक पहुंच को अवरुद्ध कर रहा हूं? मैं उद्देश्य-सी और आईओएस प्रोग्रामिंग में नौसिखिया हूं और मुझे नहीं पता कि यह कैसे काम करता है।

NSURL *assetUrl = [[NSURL alloc] initWithString:filepath]; 
    PHFetchResult *collection = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:assetUrl] options:nil]; 

    PHImageRequestOptions *requestOptionForPhotos = [[PHImageRequestOptions alloc] init]; 
    requestOptionForPhotos.networkAccessAllowed = YES; 
    requestOptionForPhotos.synchronous = NO; 

    __block BOOL isFinished = NO; 
    __block NSData * tempData = nil; 

    for(PHAsset *asset in collection) { 
    [[PHImageManager defaultManager] 
    requestImageForAsset:asset 
    targetSize:CGSizeMake(80, 80) 
    contentMode:PHImageContentModeAspectFill 
    options:requestOptionForPhotos 
    resultHandler:^(UIImage *result, NSDictionary *info) { 
     tempData = UIImagePNGRepresentation(result); 
     isFinished = YES; 
    }]; 
    } 
+0

क्या आपको वैध फ़ाइल पथ मिल रहा है? भी, क्या आपके पास "संग्रह" ऑब्जेक्ट में कोई डेटा है? –

+0

हां, कुछ डेटा और पथ भी वैध हैं। – siwymilek

उत्तर

0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
    dispatch_async(queue, ^{ 
     NSURL *assetUrl = [[NSURL alloc] initWithString:filepath]; 
     PHFetchResult *collection = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:assetUrl] options:nil]; 
     PHImageRequestOptions *requestOptionForPhotos = [[PHImageRequestOptions alloc] init]; 
     requestOptionForPhotos.networkAccessAllowed = YES; 
     requestOptionForPhotos.synchronous = NO; 

     __block BOOL isFinished = NO; 
     __block NSData * tempData = nil; 

     for (PHAsset *asset in collection) { 
      [[PHImageManager defaultManager] 
         requestImageForAsset:asset 
         targetSize:CGSizeMake(80, 80) 
         contentMode:PHImageContentModeAspectFill 
         options:requestOptionForPhotos 
         resultHandler:^(UIImage *result, NSDictionary *info) { 
          tempData = UIImagePNGRepresentation(result); 
          isFinished = YES; 
      }]; 
     } 
    }); 

asynchronusly छवि प्राप्त और मौसम की जाँच करने के लिए छवि हो रही है या नहीं परिणाम handdler पर ब्रेकप्वाइंट डाल करने के लिए इस कोड का प्रयास करें।

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