【发布时间】:2023-03-13 08:05:01
【问题描述】:
我有一个 NSMutableArray,我将它传递给 tableViewController。用户将访问和更新数组中的数据。添加对象和删除对象。
为了能够在用户与之交互之前恢复到数组的状态,我想我会制作一个数组的副本。这样,如果用户决定取消而不继续,我可以将 copyArray 传回原始数组。
但是,当我在原始数组上更新一些数据时,它也会在副本数组上得到更新。
不,我没有将它们分配给彼此。我使用了以下代码。
array2 = [array1 copy];
我什至尝试过长篇大论的。
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];
但如果我将 copyItems 设置为 YES,应用程序会因此错误而崩溃。
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SaleItem copyWithZone:]:无法识别的选择器已发送到实例 0xa21f3b0”
【问题讨论】:
-
你试过 [[NSMutableArray alloc] initWithArray:oldArray] 吗?
-
[NSArray copy]创建数组的浅表副本(即它不复制数组的内容,只是对旧对象进行新引用。您使用的第二种形式将尝试复制内容使用copy或copyWithZone对数组进行复制,它们都是NSCopying协议的一部分。如果您想要数组的深层副本,则必须为每个内容类实现这些。 -
您的 SaleItem 类不知道如何复制自己。您需要使其符合
NSCopying协议。
标签: ios objective-c arrays