我在iOS应用程序中使用以下类型的对象引用复制功能。
e.g。 objectA = objectB;
当您对objectA执行操作/更改时,它会自动反映在objectB中。您不需要再次将objectA复制到objectB以反映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中运行良好。
答案 0 :(得分:2)
我制作了简单的片段,我认为它会反映你的实际情况:一个内置可变容器的不可变容器。
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]变异的字典{ KEY = NEW; }
2015-04-15 08:37:09.741 prova [912:117578]来自原始出处{ KEY = NEW; }
此外,两个对象的地址与预期的相同:
(lldb)表达式dict(__ NSDictionaryM *)$ 2 = 0x00000001003004a0 1 键/值对
(lldb)表达式array.firstObject(__ NSDictionaryM *) $ 3 = 0x00000001003004a0 1键/值对
答案 1 :(得分:0)
尝试将其设置如下。
NSMutableDictionary *fieldObj =
[
self.theData[indexPath.section ][indexPath.row]
mutableCopy
];
&安培;校验。我相信它会奏效。