title: PHImageManager requestImageForAsset returns nil sometimes for iCloud photos
body: <p>Roughly 10% of the time PHImageManager.defaultManager().requestImageForAsset returns nil instead of a valid UIImage after first returning a valid though "degraded" UIImage. No error or other clue that I can see is returned in the info with the nil. </p>
  
  <p>This seems to happen with photos that need to be downloaded from iCloud, with iCloud Photo Library and Optimize iPad Storage both enabled. I've tried changing the options, size, etc. but nothing seems to matter.</p>
  
  <p>If I retry the requestImageForAsset after the failure it will usually correctly return a UIImage, though sometimes it requires a couple of retries.</p>
  
  <p>Any idea what I might be doing wrong? Or is it just a bug in the Photos framework?</p>
  
  <pre><code>    func photoImage(asset: PHAsset, size: CGSize, contentMode: UIViewContentMode, completionBlock:(image: UIImage, isPlaceholder: Bool) -&gt; Void) -&gt; PHImageRequestID? {
  
      let options = PHImageRequestOptions()
      options.networkAccessAllowed = true
      options.version = .Current
      options.deliveryMode = .Opportunistic
      options.resizeMode = .Fast
  
      let requestSize = !CGSizeEqualToSize(size, CGSizeZero) ? size : PHImageManagerMaximumSize
      let requestContentMode = contentMode == .ScaleAspectFit ? PHImageContentMode.AspectFit : PHImageContentMode.AspectFill
  
      return PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: requestSize, contentMode: requestContentMode, options: options)
          { (image: UIImage!, info: [NSObject : AnyObject]!) in
              if let image = image {
                  let degraded = info[PHImageResultIsDegradedKey] as? Bool ?? false
                  completionBlock(image: photoBlock.rotatedImage(image), isPlaceholder: degraded)
  
              } else {
                  let error = info[PHImageErrorKey] as? NSError
                  NSLog("Nil image error = \(error?.localizedDescription)")
             }
      }
  }
  </code></pre>