Swift向[[NSNumber]]数组追加值存plist出现所有子数组值相同问题
问题根因
- 核心错误出在外层数组的初始化逻辑:你使用
[NSMutableArray](repeating: [], count: 12)创建数组时,由于NSMutableArray属于引用类型,repeating语法会复用同一个NSMutableArray实例填充所有12个位置。 - 也就是说你声明的外层数组里12个元素指向的是同一个子数组对象,后续无论往哪个下标的子数组追加数据,实际修改的都是同一个实例,最终所有子数组的内容自然完全相同。
修复方案
把原初始化代码替换为循环创建独立子数组的写法即可,修改后代码:
var array: [NSMutableArray] = (0..<12).map { _ in NSMutableArray() }
上述写法会在每次遍历时生成全新的NSMutableArray实例,12个子数组各自独立,后续追加内容不会互相干扰。
额外优化建议
你现有代码中(array[i] as AnyObject)的写法是多余的,因为你已经显式声明了array的元素类型为NSMutableArray,可以直接调用方法:
func dataReceived(withData data: [[NSNumber]]!) { for i in 0..<12 { array[i].addObjects(from: data[i]) } }
内容的提问来源于stack exchange,提问作者ndrzhr
相关产品推荐
相关产品推荐

