PHAssetChangeRequest creationRequestForAssetFromImage: fails with error code -1

[复制链接]
169 15
我现在需要保存图片到相册,可是保存不成功,同样的代码放到一个新工程里面就正常保存,可能是什么问题,给个查找问题的思路也行,万分感谢,问各位牛人帮忙解决下,着急.谢谢.        



  •     UIImage *image = [UIImage imageNamed:@"bg.png"];     
  • [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{       
  • PHAssetChangeRequest *createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];      
  •  assetPlaceholder = createAssetRequest.placeholderForCreatedAsset;     
  •   PHAssetCollectionChangeRequest *albumChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];     
  •   [albumChangeRequest addAssets:@[ assetPlaceholder ]];  
  •  
  •  } completionHandler:^(BOOL success, NSError *error) {    
  •        NSLog(@"");     
  •  }];
  •  




----------


下面是错误提示



  •     ERROR: PLXPCDictionarySetArray unable to serialize array (       
  •     {            creationOptions = "";                 
  •                data = ;                   
  •                 fileURL = "";                    
  •                type = 1;     
  •   } ) 
  • error Error Domain=NSCocoaErrorDomain Code=3851 "Property list invalid for format: 200 (property lists cannot contain objects of type 'CFNull')" UserInfo={NSDebugDescription=Property list invalid for format: 200 (property lists cannot contain objects of type 'CFNull')}








问题解决:过程比较纠结,还向Apple技术提问了,最后还是自己的问题,因为程序里面使用了Method Swizzling,有一个对NSDictionary添加空对象也允许的方法置换,导致苹果框架保存图片到相册的方法生成的Dictionary有的key对应的object是空,这样他们内部估计是放到照片数组的时候就出问题了,没办法序列化到数组,导致保存失败。当然这个类不是我添加的,我也不知道,因为项目实在太多第三方的SDK了,发现过程很麻烦,一点一点排除的,没想到是这个。之前想过这个问题,但是没深入想,导致耽误很长时间,一个大坑呀 [ 此帖被shangpaopao在2017-03-31 09:57重新编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

15 个评论

杜有黛  新手上路  发表于 2018-5-16 11:13:55  | 显示全部楼层
找到原因了吗?我现在找不到原因,只能用ALssetLIbrary框架暂时桥接一下,你怎么解决的?

举报 使用道具

回复
hariluya  新手上路  发表于 2018-5-16 11:28:43  | 显示全部楼层
还是不行.我觉得代码没问题就是工程配置的原因,但是不知道从哪下手

举报 使用道具

回复
gordon_5555  新手上路  发表于 2018-5-16 11:32:12  | 显示全部楼层
防止越界和图片数据有关系吗?我这边没存储直接从工程里找一个图片保存都不成功,真是郁闷极了,新建的工程里就没有问题,如果重新搭建公司的工程那也太麻烦了了,而且也不一定能成功。

举报 使用道具

回复
valkyrie  新手上路  发表于 2018-5-16 11:56:57  | 显示全部楼层
你线上版本是用iPhoto框架保存的图片吗?线上正常,现在不行了?是改了工程配置吗?

举报 使用道具

回复
funny714  新手上路  发表于 2018-5-16 12:27:29  | 显示全部楼层
没解决,郁闷几天了,之前我们用的AssetLibrary这个框架,现在打算换Iphoto,就出现这种问题了.你和我的情况一样吗?有解决方案了给我说下啊

举报 使用道具

回复
polo1234  新手上路  发表于 2018-5-16 14:29:34  | 显示全部楼层
我这边找到原因了,有个同事写了个数组的扩展方法,防止数组越界的。然后我这边图片是存在数组中,用户选中图片保存。因为那个新添加的方法导致数组添加的对象有问题,图片保存一直有error。具体深层次原因也不是很理解,问题解决了倒是真的。你可以看看你们工程有没有这种情况

举报 使用道具

回复
caedev  新手上路  发表于 2018-5-16 14:31:19  | 显示全部楼层
嗯 用的是这个 线上正常,因为是主项目,4人开发, 所以我也不知道他们有没有改什么工程配置,上个版本的标签代码完全正常。查了些资料说是什么序列化问题,并没有找到解决办法

举报 使用道具

回复
lovedwf  新手上路  发表于 2018-5-16 15:42:34  | 显示全部楼层
我现在需要保存图片到相册,可是保存不成功,同样的代码放到一个新工程里面就正常保存,可能是什么问题,给个查找问题的思路也行,万分感谢,问各位牛人帮忙解决下,着急.谢谢.        



  •     UIImage *image = [UIImage imageNamed:@"bg.png"];     
  • [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{       
  • PHAssetChangeRequest *createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];      
  •  assetPlaceholder = createAssetRequest.placeholderForCreatedAsset;     
  •   PHAssetCollectionChangeRequest *albumChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];     
  •   [albumChangeRequest addAssets:@[ assetPlaceholder ]];  
  •  
  •  } completionHandler:^(BOOL success, NSError *error) {    
  •        NSLog(@"");     
  •  }];
  •  




----------


下面是错误提示



  •     ERROR: PLXPCDictionarySetArray unable to serialize array (       
  • &#160; &#160;&#160;{&#160; &#160; &#160; &#160; &#160; &#160; creationOptions = &quot;<null>&quot;;&#160; &#160; &#160; &#160;&#160;&#160; &#160; &#160; &#160; &#160;
  • &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;data = <ffd8ffe0 ………>;&#160; &#160; &#160; &#160; &#160; &#160;&#160;&#160; &#160; &#160; &#160;
  • &#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fileURL = &quot;<null>&quot;;&#160; &#160; &#160; &#160; &#160;&#160; &#160; &#160; &#160; &#160; &#160;
  • &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;type = 1;&#160; &#160;&#160;&#160;
  • &#160; } )&#160;
  • error Error Domain=NSCocoaErrorDomain Code=3851 &quot;Property list invalid for format: 200 (property lists cannot contain objects of type &#39;CFNull&#39;)&quot; UserInfo={NSDebugDescription=Property list invalid for format: 200 (property lists cannot contain objects of type &#39;CFNull&#39;)}








问题解决:过程比较纠结,还向Apple技术提问了,最后还是自己的问题,因为程序里面使用了Method Swizzling,有一个对NSDictionary添加空对象也允许的方法置换,导致苹果框架保存图片到相册的方法生成的Dictionary有的key对应的object是空,这样他们内部估计是放到照片数组的时候就出问题了,没办法序列化到数组,导致保存失败。当然这个类不是我添加的,我也不知道,因为项目实在太多第三方的SDK了,发现过程很麻烦,一点一点排除的,没想到是这个。之前想过这个问题,但是没深入想,导致耽误很长时间,一个大坑呀 [ 此帖被shangpaopao在2017-03-31 09:57重新编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
nifeng118  新手上路  发表于 2018-5-16 15:45:00  | 显示全部楼层
NSDictionary+NilSafe.h NSDictionary+NilSafe.m 无意中加了这个类,话费了我2天时间才知道原因

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

ios.irunthink.com
搜索
热搜: iOS swift 下拉刷新

图文热点

更多

开发教程

更多

客服中心

400-800 周一至周日 9:30-17:30 仅收市话费

关注我们

  • 微信扫描
  • 关注微信
关于我们
关于我们
友情链接
联系我们
帮助中心
精贴推荐
源码上传
注册登录
服务支持
资源下载
关注我们
官方微博
官方空间
快速回复 返回顶部 返回列表