gpt4 book ai didi

ios - 指向同一地址的两个对象不起作用。例如新数组 = 旧数组

转载 作者:行者123 更新时间:2023-11-29 10:30:59 25 4
gpt4 key购买 nike

我在整个 iOS 应用程序中使用以下类型的对象引用复制功能。

例如objectA = objectB;

当您对 objectA 执行操作/更改时,它会自动反射(reflect)在 objectB 中。您不需要再次将 objectA 复制到 objectB 以反射(reflect) objectB 中的更改,因为它们指向/引用相同的位置(地址)。

问题是它在 iOS 8.2 之前工作正常,但它似乎在 iOS 8.3 中根本无法工作。

以下是无法正常工作的代码片段之一。

    NSMutableDictionary *fieldObj = self.theData[indexPath.section ][indexPath.row];

// Adding text to data array
[fieldObj setObject:textField.text.stringByStrippingHTML forKey:@"value"];

NSLog(@"Line 1 \n%@",fieldObj);
NSLog(@"Line 2 \n%@",self.theData[indexPath.section][indexPath.row]);

从上面的代码来看,第 1 行和第 2 行在 iOS 8.2 中提供相同的输出。

Line 1 
{
name = Name;
required = NO;
type = 4;
value = asdfasdfasdfasdfsad;
}
Line 2
{
name = Name;
required = NO;
type = 4;
value = asdfasdfasdfasdfsad;
}

但是在 iOS 8.3 中,它们给出了不同的输出。

Line 1 
{
name = Name;
required = NO;
type = 4;
value = asdfasdfasdfasdfsad;
}
Line 2
{
name = Name;
required = NO;
type = 4;
value = "";
}

我是不是做错了什么?

如果没有,有人知道这个问题以及如何解决吗?

编辑:对于上述误导性问题,我深表歉意,我发现上述问题背后的原因是 indexPathForItemAtPoint:(CGPoint) 仅在 iOS 8.3 中返回错误的 indexPath。

The code I have used is as follow:
// retrieve indexpath from uitextfield
CGPoint pos = [textField convertPoint:CGPointZero toView:self.collectionView];
NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:pos];

以上代码适用于 iOS 8.2 版本。

最佳答案

我做了一个简单的片段,我认为它会反射(reflect)你的实际情况:一个不可变的容器,里面有可变的容器。

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSArray * array = @[@{@"KEY" : @"OLD" }.mutableCopy];
NSMutableDictionary * dict = array.firstObject;
[dict setObject:@"NEW" forKey:@"KEY"];
NSLog(@"Mutated dict %@",dict);
NSLog(@"From original source %@",array.firstObject);



}
return 0;
}

一切似乎都按预期工作,你确定你在其他地方做某事吗?

2015-04-15 08:37:09.740 prova[912:117578] Mutated dict { KEY = NEW; }
2015-04-15 08:37:09.741 prova[912:117578] From original source { KEY = NEW; }

此外,这两个对象都具有与预期相同的地址:

(lldb) expression dict (__NSDictionaryM *) $2 = 0x00000001003004a0 1 key/value pair
(lldb) expression array.firstObject (__NSDictionaryM *) $3 = 0x00000001003004a0 1 key/value pair

关于ios - 指向同一地址的两个对象不起作用。例如新数组 = 旧数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com