iOS使用UIImagePickerController在相册中选择破损图crash

本文介绍了一个在选择破损图片时导致应用程序崩溃的问题,并详细解释了如何通过修改NSMutableDictionary的方法来避免崩溃,尽管这可能导致 UIImagePickerController 的某些功能无法正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复现crash场景选取破损图点击选取按钮crash,控制台输出:

*** setObjectForKey: object cannot be nil (key: croppedImage)

代理方法:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullableNSDictionary<NSString *,id> *)editingInfo;

都没有调用。


通过控制台输出日志可以看出系统在字典中加入nil引起了crash了


解决方案:

使用runtime修改NSMutableDictionarysetObject:forKey:方法

- (void)na_setObject:(id)anObject forKey:(id<NSCopying>)aKey {

    if (!anObject){

        TLog(@"%s can add nil object into NSMutableDictionary",__FUNCTION__);

        return;

    }

    [selfna_setObject:anObjectforKey:aKey];

}

这样可以避免crash但是UIImagePickerController不会执行:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullableNSDictionary<NSString *,id> *)editingInfo;


转而执行:

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;


获取破损图的方法:使用记事本打开任意图片,删除其中一段保存。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值