Swift3: соединение с assetsd было прервано, или assetsd умер на UIImagePickerController, didFinishPickingMediaWithInfo - PullRequest
0 голосов
/ 12 сентября 2018

Я реализую персональную Фотогалерею, хранящуюся в специальном Фотоальбоме, используя PHAssets.

Пользователь может делать снимки с камеры для сохранения в этом личном альбоме. Этот альбом отображается в приложении через CollectionView

В настоящее время, если я добавляю более 6 изображений, я сталкиваюсь со следующей проблемой:

Connection to assetsd was interrupted or assetsd died

потом в логах

CoreData: XPC: sendMessage: failed #0
CoreData: XPC: XPC connection was invalidated
Message from debugger: Terminated due to memory issue

Я попытался уменьшить размер изображений, которые будут вставлены в PHAsset (используя функцию resizeImage), но результат тот же. Снимок сделан, правильно добавлен в PHAsset и приложение вылетает. Если я перезапускаю приложение, я вижу добавленное изображение, но если я пытаюсь добавить другое изображение, я сталкиваюсь с тем же сбоем.

Вот код didFinishPickingMediaWithInfo:

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){

    if let image: UIImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {

        let rez_img = resizeImage(image: image, withSize: CGSize(width: 300, height: 300))

            // Create asset for the taken image and save it
            PHPhotoLibrary.shared().performChanges({
                let assetToCreate = PHAssetChangeRequest.creationRequestForAsset(from: rez_img)

                if let assetPlaceholder = assetToCreate.placeholderForCreatedAsset {
                    self.photoIdentifier = assetPlaceholder.localIdentifier // Retrive the local identifier of the photo

                     if let albumChangeRequest = PHAssetCollectionChangeRequest(for: self.assetCollection, assets: self.photosAsset) {
                        albumChangeRequest.addAssets(([assetPlaceholder] as NSArray?)!)
                     }
                }
            },
            completionHandler: {(success, error) -> Void in
                NSLog("Adding Image to library > %@", (success ? "Success":"Error"))
                DispatchQueue.main.async {
                    picker.dismiss(animated: true, completion: nil)
                }

            })//end performChanges

    }

}

Может быть, мне нужно освободить память перед отображением моего CollectionView?

...