繁体   English   中英

使用自定义方法向NSMutableArray目标C添加对象

[英]Using custom method to add objects to NSMutableArray Objective C

我是Objective C的新手,我正在尝试将对象添加到NSMutableArray中,以便可以在项目中多次使用。 我有一个Model类

历史记录

进口

@interface History : NSObject

@property (nonatomic) NSString *itemName;
@property (nonatomic) int quantity;
@property (nonatomic) double total;
@property (nonatomic) NSDate *purchaseDate;

- (instancetype)initWithName: (NSString*)itemName withQuantity:(int)quantity withTotal:(double) total withPurchaseDate:(NSDate*) purchaseDate;

@end

历史记录

#import "History.h"

@implementation History

-(instancetype)initWithName: (NSString*)iName withQuantity:(int)iQuantity withTotal:(double) iTotal withPurchaseDate:(NSDate*) iPdate {

    self = [super init];
    if(self) {
        self.itemName = iName;
        self.quantity = iQuantity;
        self.quantity = iQuantity;
        self.purchaseDate = iPdate;
    }
    return self;
}

@end

储存库

#import <Foundation/Foundation.h>

@interface Repository : NSObject

@property (nonatomic) NSMutableArray *itemHistory;

-(void) pushToArray:(NSString *)name withQuantity:(int)qty withTotal:(double) total withPurchaseDate:(NSDate*) pDate;

@end

仓库

#import "Repository.h"
#import "History.h"

@interface Repository()

//@property (nonatomic) NSMutableArray *itemHistory;

@end

@implementation Repository

-(NSMutableArray *) itemHistory {

    if(_itemHistory == nil) {
        _itemHistory = [[NSMutableArray alloc] init];
    }
    return _itemHistory;
}

这是我想用来将对象添加到MutableArray的方法。

-(void) pushToArray:(NSString *)name withQuantity:(int)qty withTotal:(double) total withPurchaseDate:(NSDate*) pDate {

    self.itemHistory = [[NSMutableArray alloc] init];

    History *obj = [[History alloc] init];
    obj.itemName = name;
    obj.quantity = qty;
    obj.total = total;
    obj.purchaseDate = pDate;

    [self.itemHistory addObject:obj];

}

@end

提前谢谢你的帮助。

每次调用pushToArray:...您都在用一个新的,空的,可变的数组替换现有的itemHistory 您只会看到该数组中要推送的最后一项。

但是,您也不需要延迟初始化_itemHistory 只需在init方法中创建一个实例并完成该操作即可。 避免造成混乱和重构。


在您的存储库类中,只需实现指定的初始化程序:

- (instancetype) init
{
    if (self=[super init]) {
       _itemHistory = [[NSMutableArray alloc] init];
    }
    return self;
}

取消注释该属性:

@interface Repository()
@property (nonatomic) NSMutableArray *itemHistory;
@end

并从-pushToArry:...方法中删除它:

//self.itemHistory = [[NSMutableArray alloc] init];

如果仍然无法正常工作,则需要显示如何记录故障。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM