2016-03-25 19 views
5

Tôi muốn đọc tệp được chỉ định (ảnh từ thư viện ảnh) không đồng bộ, nhưng nó không hoạt động đối với tôi.Không thể đọc nội dung PHAsset không đồng bộ

Biến tempData được nil cho đến khi tôi thay đổi cấu hình requestOptionForPhotos.synchronous thành YES, thì mọi thứ đều ổn, nhưng tôi không muốn thực hiện mã này đồng bộ.

Tôi có thể chặn quyền truy cập vào ảnh bằng cách yêu cầu cùng một tệp trong chuỗi khác không? Tôi là người mới trong chương trình khách quan-c và iOS và tôi không biết nó hoạt động như thế nào.

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

bạn có nhận được đường dẫn tệp hợp lệ không? Ngoài ra, có bất kỳ dữ liệu nào bạn đang nhận được trong "bộ sưu tập" đối tượng? –

+0

Có, có một số dữ liệu và đường dẫn cũng hợp lệ. – siwymilek

Trả lời

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; 
      }]; 
     } 
    }); 

thử mã này để có được asynchronusly hình ảnh và đặt breakpoint trên kết quả handdler để kiểm tra thời tiết bạn đang nhận được hình ảnh hay không.

Các vấn đề liên quan