从 NSMutableArray 添加和删除对象

Posted

技术标签:

【中文标题】从 NSMutableArray 添加和删除对象【英文标题】:Adding and removing objects from NSMutableArray 【发布时间】:2014-04-18 18:04:49 【问题描述】:

我正在 iPad 上实施购物车项目。

我有一个类“productItem”

#import <Foundation/Foundation.h>

@interface ProductItem : NSObject

+(instancetype)createProductId:(NSString *)aId description:(NSString *)aDesc price:(int)aPrice;
@property(nonatomic, copy)NSString *productId;
@property(nonatomic, copy)NSString *description;
@property(nonatomic)int price;

@end

“CartItem”类

@interface CartItem : NSObject

@property(nonatomic,weak)ProductItem *prodItem; @property(nonatomic)int 数量;

+(instancetype)createProdItem:(posProductItem *)aProdItem 数量:(int)aQuantity;

@结束

我有另一个类“ProductStore”。这个类有 2 个 NSMUtableAray 存储 productItems 和 cartItems:

@property(nonatomic)NSMutableArray *productItems;
@property(nonatomic)NSMutableArray *cartItems;

我实现了 2 个 ViewController,productSearchViewController 和 cartViewController。 cartViewController 基本上显示了 cartItems 中的元素。

productSearchViewController 的功能描述如下:

productSearchViewController

产品显示在 UICollectionView 中。从 Web 服务检索的 ProductItems 填充到 ProductStore NSMutableArray "productItems"

产品项可以添加到“cartItems”中。

[CartItem createProdItem:aProdItem 数量:1]; // 这里 aProdItem 是 ProductItem *

用户可以在 UISearchBar 中搜索产品。我实现了(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString*)searchText 来查询Web 服务的数据。对于每次搜索,我将清除 NSMutableArray "productItems" 并使用来自网络服务的数据重新填充它

因为我清除了 UIMutableArray "productItems",所以 NSMutableArray "cartItems" 中的 productItem 也会被删除。 cartItem 元素仍然存在,但每个 cartItem 元素中的 productItem 为空:产品 id、描述和价格为空。

我应该如何解决这个问题?将产品添加到购物车时,我应该将 ProductItem 对象复制到 CartItems 中吗?

【问题讨论】:

prodItem使用强属性。 嗨热舔,谢谢回复。行得通。 但是看看 Murat 的回答——你在做什么没有多大意义。 【参考方案1】:

prodItem 设置为 nil,因为您已在以下行中的 CartItem 中将其声明为 weak 属性:

@property(nonatomic,weak)ProductItem *prodItem;

如果您需要在CartItem 类中使用strong 属性,即使它已从productItems 数组中删除,您也应该使用它。

@property(nonatomic,strong)ProductItem *prodItem; 

虽然这应该可以解决您的问题,但实际上清除 productItems 而保留 cartItems 并没有多大意义。

【讨论】:

您好,谢谢您的回复。会创建另一个 NSMutableArray 来存储搜索 productItems 帮助吗? 再想一想,我认为您不需要两个不同的数组,因为您显然使用productItems 来存储productSearchViewController 显示的项目。我被 ProductStore 类的名称误导了,我认为 productItems 应该包括商店中的所有商品。

以上是关于从 NSMutableArray 添加和删除对象的主要内容,如果未能解决你的问题,请参考以下文章

从 NSMutableArray 中删除重复的自定义对象,确保保留最新的重复对象

从 NSmutableArray 中删除项目

按键从 NSMutableArray 中删除对象

从 NSMutableArray 中删除对象时崩溃

如何从 NSMutableArray 中删除对象?

如何从 NSMutableArray 中删除 nil 对象?