NSMutableArray 多次添加相同的 NSDictionary

NSMutableArray adds same NSDictionary multiple times

我正在遍历一个数组,获取两个项目并将它们放入字典中,然后将它们添加到一个数组中,但它一直在为数组中的数字对象添加数组的最后一项,即使当我在循环中记录字典时,它具有正确的值。这是我的代码

            for (TFHppleElement *element in nodesArray) {

    [nameAndHrefDict setObject:[element objectForKey:@"href"] forKey:@"href"];
    [nameAndHrefDict setObject:[element text] forKey:@"name"];
    NSLog(@"PRE: %@", nameAndHrefDict);
    [arrayOfDicts addObject:nameAndHrefDict];
    NSLog(@"IN: %@", arrayOfDicts);


}

在日志中我看到了这个

PRE: {
href = "/dining-choices/res/index.html";
name = "Commons Dining Hall";
}

IN: (
    {
    href = "/dining-choices/res/index.html";
    name = "Commons Dining Hall";
}
PRE: {
href = "/dining-choices/res/sage.html";
name = "Russell Sage Dining Hall";
}

IN: (
    {
    href = "/dining-choices/res/sage.html";
    name = "Russell Sage Dining Hall";
},
    {
    href = "/dining-choices/res/sage.html";
    name = "Russell Sage Dining Hall";
}
)

发生了什么事?

但是它添加了 nodesArray 的最后一个值 8 次,而不是每个值,为什么?

提前感谢您的帮助。

请尝试:

 for (TFHppleElement *element in nodesArray) {

      [arrayOfDicts addObject:[NSDictionary dictionaryWithObjectsAndKeys:[element objectForKey:@"href"], @"href", [element text], @"name", nil]];
 }

对象通过引用添加到数组。该数组不会创建字典的副本,它只是记录添加了哪个字典。您每次都向数组添加相同的字典 nameAndHrefDict。所以数组认为自己多次持有同一个对象。

在每次迭代中,您都在更改该对象的值,但它仍然是同一个对象。

因此,潜在的问题是识别与价值。数组由标识填充。您期望它按值填充。

解决方法:将字典添加到数组时复制字典,或者每次都从头开始创建一个全新的字典。

你每次都需要allocinit数组,这样它就有了新的内存,然后它就不会添加相同的数组8次

你必须在循环中实例化字典:见代码

NSMutableArray *saveData = [[NSMutableArray alloc]init];

for (int i=0; i<records.count; i++) {

    RecordTable *record = [records objectAtIndex:i];
    NSString *addID = record.addr_id;

    NSMutableDictionary *saveToDic = [[NSMutableDictionary alloc]init];
    [saveToDic setValue:addID forKey:@"addr_id"];

    [saveData addObject:saveToDic];

    }