Jor*_*gen 3 arrays objective-c ios
我有一个NSMutableArray,我将其传递给tableViewController.用户将访问和更新阵列中的数据.添加对象并删除对象.
为了能够在用户与之交互之前返回到数组的状态,我想我会复制一个数组.这样,如果用户决定取消而不继续,我可以将copyArray传回原始数组.
但是,当我更新原始数组上的某些数据时,它也会在副本数组上更新.
不,我没有把它们分配给对方.我使用了以下代码.
array2 = [array1 copy];
Run Code Online (Sandbox Code Playgroud)
我甚至尝试了那个长途跋涉的人.
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];
Run Code Online (Sandbox Code Playgroud)
但是,如果我将copyItems设置为YES,则应用程序会因此错误而崩溃.
*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [SaleItem copyWithZone:]:无法识别的选择器发送到实例0xa21f3b0'
您应该查看数组的深拷贝和浅拷贝之间的区别.简而言之,您只想要数据结构的副本,还是想要数组中的项目副本?(原件和副本是否应指向相同的对象?)
要解决此错误:
- 因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [SaleItem copyWithZone:]:无法识别的选择器发送到实例0xa21f3b0'
您还需要在班级中实施NSCopyingSaleItem.
制作NSArray(或init从旧的数组中获取新数组)的"副本" 只会为您提供一个新数组,其中包含指向与第一个数组相同的对象的指针,而不是这些对象的副本.基于Stack Overflow上另一个问题的答案,您可以使用:
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];
Run Code Online (Sandbox Code Playgroud)
获取复制的第一级项目(假设它们已实现NSCopying),但这可能会或可能不足以满足您的目的,具体取决于这些对象是什么. 我所链接的这个问题有更多关于制作"深层"副本的答案NSArray.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |