对象-ios 往可变字典添加object会覆盖到上一个key的值啊!!怎么解决!有代码~~

问题描述

ios 往可变字典添加object会覆盖到上一个key的值啊!!怎么解决!有代码~~

self.arr=[NSMutableArray new];
self.dic=[NSMutableDictionary new];
[self.arr addObjectsFromArray:@[@"1",@"2",@"3"]];
[self.dic setObject:self.arr forKey:@"key1"];

[self.arr removeAllObjects];
[self.arr addObjectsFromArray:@[@"3",@"4",@"5"]];
[self.dic setObject:self.arr forKey:@"key2"];

NSLog(@"%@",self.dic);

    输出结果:
    {
key1 =     (
    3,
    4,
    5
);
key2 =     (
    3,
    4,
    5
);

}

解决方案

[self.arr removeAllObjects];
->
self.arr=[NSMutableArray new];

解决方案二:

oc对象是引用类型的!肯定会跟着变!

解决方案三:

_arr1 = [NSMutableArray new];
[self.arr1 addObjectsFromArray:@[@"3",@"4",@"5"]];

[_dic setValue:_arr1 forKey:@"key2"];
    这样不就行了

解决方案四:

把数组深拷贝一下,然后添加到字典中,就可以了

解决方案五:

你的字典里存的是同一个地址(对象)的数据(self.arr),所以只要self.arr内容改变,字典的内容就变

可以在第二次set的时候:执行 set:[self.arr copy]或者[self.arr mutableCopy];

时间: 2024-10-29 11:09:57

对象-ios 往可变字典添加object会覆盖到上一个key的值啊!!怎么解决!有代码~~的相关文章

iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码_IOS

废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableViewCell.h" #define kDeviceWidth [UIScreen mainScreen].bounds.size.width #define kDeviceHeight [UIScreen mainScreen].bounds.

ios 可变字典存放数组的时候,会把所有的key的value都替换成目前的key所对应的值

问题描述 ios 可变字典存放数组的时候,会把所有的key的value都替换成目前的key所对应的值 请问是什么原因? 我打个比方 可变数组 mDiC,它里面为key1=1,key2=2. 当我setobject for key---> key3=3: 他就把可变字典mDic里面的values全部替换成3. 也就是 mDic里面:key1=3,key2=3,key3=3 解决方案 所有的value是不是同一个变量 解决方案二: 感觉是底层指向同一个地址的数据,然后修改了所指向的地址的数据导致的?

ios-iOS中在类别中动态新增了的可变字典属性变成了不可变字典

问题描述 iOS中在类别中动态新增了的可变字典属性变成了不可变字典 想在category中新增个属性来用,创建的可变字典属性,也做了相关关联,结果用不了setobject方法,打印出来一看发现变成了不可变字典类型,希望有大神帮我看看哪里出问题了: static void *myAllPropertiesDicKey = &myAllPropertiesDicKey; @implementation FatherClass (Category) //add setter and getter me

oc-有没有字典转成可变字典的简单有效的方法

问题描述 有没有字典转成可变字典的简单有效的方法 想转成可变字典有没有什么简单有效的方法 解决方案 用一个对象包装下,这样对象本身不能修改,但是对象的成员可以修改. 解决方案二: java基础-数值运算中的类型转换问题

设计一个不强引用对象的单例字典

设计一个不强引用对象的单例字典 大家都知道,使用NSDictionary存储对象的时候会强引用对象,导致被存储对象的引用计数+1,有时候,我们想用单例来存储对象,但又不希望强引用存储的对象,这该怎么实现呢? 在这里,我们可以使用NSMapTable来实现这个功能. 我直接给出源码: WeakDictionary.h   +   WeakDictionary.m // // WeakDictionary.h // 弱引用字典 // // http://www.cnblogs.com/YouXian

iOS - Swift Dictionary 字典

前言 public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible public class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration 字典用于存储无序的数据元素值,它可以存储任何类型的元素,甚至可以将数组作为字典的元素. 1.Dict

javascript 对象数组根据对象object key的值排序

 本文仅仅是实现了javascript 对象数组根据对象object key的值排序,算是对自己学习javascript这么久的一个小结,希望大家能够喜欢     有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义:   代码如下: function keysrt(key,desc) { return function(a,b){ return

《python 与数据挖掘 》一 3.3 可变对象与不可变对象

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第3章,第3.3节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 3.3 可变对象与不可变对象 Python的所有对象可分为可变对象和不可变对象(见表3-1).所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变. 我们在前面已经介绍过数值类型是不可变对象,当程序尝试改变数据的值时,程序会重新生成新的数据,而不是改变原来的数据. 之所以本书要将这部分内容放到函数这一

python实现给字典添加条目的方法_python

本文实例讲述了python实现给字典添加条目的方法,是针对字典操作中比较实用的技巧.分享给大家供大家参考. 具体实现方法如下: def addWord(theIndex,word,pagenumber): theIndex.setdefault(word, [ ]).append(pagenumber)#存在就在基础上加入列表,不存在就新建个字典key d = {"hello":[3]} #d = {} addWord(d,"hello",3) addWord(d,