从 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”中。用户可以在 UISearchBar 中搜索产品。我实现了[CartItem createProdItem:aProdItem 数量:1]; // 这里 aProdItem 是 ProductItem *
(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 添加和删除对象的主要内容,如果未能解决你的问题,请参考以下文章