前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【iOS开发】Connection to assetsd was interrupted or assetsd died

【iOS开发】Connection to assetsd was interrupted or assetsd died

作者头像
KyXu
发布2019-04-11 16:26:03
1.5K0
发布2019-04-11 16:26:03
举报
文章被收录于专栏:KyXu

在iOS开发中,通过 UIImagePickerController 获取系统相册中的照片的 URL 并不非常的直观。

StackOverFlow 上面的相关问题基本都指向了下面这个方法:

示例代码

即,import AssetsLibrary 之后,在 imagePickerController 的方法中,通过 ALAssetsLibrary 的 writeImageToSavedPhotosAlbum 方法,在闭包中获取assetURL,而值得注意的是,有不少人在这里出现了内存管理的问题(循环引用),最终导致控制台输出如下。

报错信息

Connection to assetsd was interrupted or assetsd died

这个信息出现,基本就可以确定是内存管理出了问题,但是具体原因就视情况而定了。

有人是通过加入 autoreleasepool 或者用 GCD 解决的问题,而我在尝试无果之后发现了另一个非常隐蔽的原因:

正确代码

错误代码

这里虽然我们是以获取URL为目的,但是把选中的图片写入系统相册也是必须的,而这一步的 CGImage 参数必须由 UIImage.CGImage 获得,而不能是用 as! 进行强制类型转换,当然更不能是nil。

在 writeImageToSavedPhotosAlbum 这个方法中,CGImage 参数和最后的闭包参数都是可以写成nil并通过编译的,但是前者写成nil会造成这个方法不能被成功执行,后面的闭包是我们获取 assetURL 的唯一途径。所以二者都必不可少。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015.08.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档