美文网首页
决解数组中的字典重新赋值报错问题

决解数组中的字典重新赋值报错问题

作者: 开开心心美滋滋 | 来源:发表于2017-08-17 13:46 被阅读0次

问题描述

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSDictionaryI 0x608000465600> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key selectedStatus.'

       先说一下我遇到这个问题时的情况:一个 cell 在正常显示情况下它的右边不会出现任何的东西(其实这个 cell 在创建的时候右边是添加了一个 imageView的,只是创建好之后它默认是不显示的),但是当它被选中之后右边的 imageView 就会显示出来,在数据源数组中存放的是和 cell 一一对应的一个不可变字典,在字典中有一个 BOOL 类型的值来控制 cell 右边 imageView 的显示。在 cell 被选中之后需要从数据源数组中取出对应的不可变字典来改变其中控制 imageView 显示的 BOOL 值,改完之后重新覆盖回数据源数组中去,替换当前 cell 所对应的字典。然后刷新当前 cell 所对应的这一行。

决解办法

NSDictionary *selectedDic =self.dataSource[indexPath.row];

下面的这一步很关键,假如没有这一步程序就会 Creash ,因为在数组中的不可变字典不会响应 setObject:forKey: 或者 setValue:forKey:方法

NSMutableDictionary *newDic = selectedDic.mutableCopy;

NSNumber *number = selectedDic[@"selectedStatus"];

BOOL isShow = [number boolValue];

BOOL newStatus = !isShow;

可变字典使用该方法更新字典中的值就不会有问题,假如这里不使用可变字典 newDic 而是使用不可变字典 selectedDic ,那么就会遇到上面的问题

[newDic setValue:@(newStatus) forKey:@"selectedStatus"];

[self.dataSource replaceObjectAtIndex :indexPath.row withObject :newDic];

[tableView  reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic];

相关文章

  • 决解数组中的字典重新赋值报错问题

    问题描述 Terminating app due to uncaught exception 'NSUnknown...

  • Python基础--对字典进行增删改

    字典新增,直接给对应的key赋值字典删除,关键字del方法修改字典,直接给对应的key重新赋值字典中添加列表,给k...

  • vue中的数组赋值问题

    vue中的数组赋值 上面的方式一方式二赋值是将会 报错 vue中数组赋值是个坑,无法更新页面需要遍历后赋值给当前...

  • PS1 Q3关于二维数组赋值的问题

    在Q3初始化二维数组后重新赋值出现了以下的问题: 或者在按以下方式初始化数组: 当在对这个数组重新赋值时,会出现:...

  • vuex 中操作数组,报错 Do not mutate vuex

    报错: 操作是这样,每次赋值新数组(selection)给temp,然后actions中commit motati...

  • 6.3 集合的可变性

    6.3 集合的可变性 数组和字典都是用于在一个集合中存储多个值。当你给将一个数组或字典赋值给一个变量,那么这个数组...

  • ES6变量的解构赋值

    目录 1、数组的解构赋值 2、对象的解构赋值 3、字符串的解构赋值 4、函数参数的解构赋值 5、用途 1、数组的解...

  • ES6标准入门 摘要 (解构赋值)

    解构赋值 数组的解构赋值 如果等号的右边不是数组(或者严格地说,不是可遍历的结构),那么将会报错。 对象的解构赋值...

  • 第三章 变量的解构赋值

    3.1数组的解构赋值 3.1.1基本用法 Es6允许按照一定模式从数组和对象中取值,然后对变量进行赋值,这被称为解...

  • Swift 4.0 数组(Array)学习

    定义数组常量(常量只有读操作) 定义数组变量 赋值 取值 删除元素 添加元素 元素重新赋值 数组遍历

网友评论

      本文标题:决解数组中的字典重新赋值报错问题

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