gpt4 book ai didi

iOS,为什么当我修改从 fetchedResult 创建的 MutableArray 的内容时它会自动更新自身?

转载 作者:行者123 更新时间:2023-11-29 02:41:49 24 4
gpt4 key购买 nike

我正在为我的 tableViewController 使用 FetchedResultController 的东西,一旦我得到结果,我就用获取的对象创建一个 NSArray

self.sortedArray = [self.fetchedResultsController fetchedObjects];

现在,我得到了所有想要的结果,但是当我对 self.sorted 数组中的对象进行更改时,比如说......

Product *product = [self.sortedArray objectAtIndex:indexPath.row];
product.date = newDate;
bla bla blaaaa

注意:产品是所获取实体的一个实例。

现在,当我尝试从获取的结果中访问旧的、未修改的对象时,

Product *actualProduct = [self.fetchedResultsController objectAtIndexPath:indexPath];

它给了我更新的版本。在此之前我没有保存上下文。

另外,我不能使用

[self.moc refreshObject:product mergeChanges:NO];

因为同一对象的不同字段是使用其他控件更新的,所以我需要跟踪对同一对象的所有更改,还需要引用原始对象。

我通过创建一个单独的 NSMubtableArray 进行了相同的尝试,即使使用 NSArray.. 也得到了相同的结果。

最佳答案

当您将 fetchedObjects 存储在数组中时,您只是存储了对该数组的引用。该数组存储对其拥有的对象的引用。所以当你修改这些对象时,数组将指向被修改的对象。如果您不想更改原始对象,请执行类似的操作或创建一个全新的 Product 对象并从 [self.sortedArray objectAtIndex:indexPath.row] 复制值并修改它。

Product *product = [[self.sortedArray objectAtIndex:indexPath.row] copy];
product.date = newDate;
...

如果您的自定义对象很复杂,您可能必须重写 NSObject 的 copyWithZone:(NSZone *)zone,就像它内部有更多对象一样。在此处阅读有关复制对象的更多信息 https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/ObjectCopying.html

关于iOS,为什么当我修改从 fetchedResult 创建的 MutableArray 的内容时它会自动更新自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25677098/

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