美文网首页iOS移动开发iOS ProcessiOS 开发
【iOS开发】Connection to assetsd was

【iOS开发】Connection to assetsd was

作者: KyXu | 来源:发表于2015-08-05 00:53 被阅读7198次

    在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 的唯一途径。所以二者都必不可少。

    相关文章

      网友评论

      • wwwwwwww1:Communications error: <OS_xpc_error: <error: 0x106199b40> { count = 1, contents =
        "XPCErrorDescription" => <string: 0x106199ef0> { length = 22, contents = "Connection interrupted" }
        }>
        这个错误作者你遇到过么?
        挠叔:@D_w 我也遇到了这个问题 你解决了么。 是我选择的图片太多了
        KyXu:@D_w 没有 建议你去stackOverFlow看看

      本文标题:【iOS开发】Connection to assetsd was

      本文链接:https://www.haomeiwen.com/subject/etgvqttx.html