1

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

例如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 版本之前都可以正常工作。

4

2 回答 2

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) 表达式字典 (__NSDictionaryM *) $2 = 0x00000001003004a0 1 个键/值对
(lldb) 表达式 array.firstObject (__NSDictionaryM *) $3 = 0x00000001003004a0 1 个键/值对

于 2015-04-15T06:41:13.817 回答
0

尝试如下设置。

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

& 查看。我相信它会起作用。

于 2015-04-15T06:29:22.537 回答