gpt4 book ai didi

objective-c - 应用组织 : Classes vs arrays

转载 作者:行者123 更新时间:2023-11-29 13:33:45 25 4
gpt4 key购买 nike

我正在尝试创建一个应用程序(我的第一个)来为我生成发票。最初我的想法是有以下类(class):

  • 用户(以下所有应用程序数据所属的用户)
  • 客户(向谁开账单:姓名、公司名称、账单地址、电话等...)
  • 任务(发票上的一个项目:名称、描述、小时费率等...)
  • 发票(由客户和多个任务)

我想我可以让用户选择“添加新客户”,这将创建一个客户对象,然后将该对象存储到一个客户数组中。与“添加新任务”相同,这将创建一个任务对象并将其添加到任务数组中。然后我将能够创建一个 Invoice 对象,它指向客户数组中的某个值和任务数组中的多个任务。

我遇到的问题是,每次有人按下“添加新客户”或“添加新任务”时,我都不知道如何创建新对象。我试过这样做:

Customer *customer = [[Customer alloc] init];
[customer setName:@"John Doe"];
[customer setCompanyName:@"John's Swimming Pools"];

[user1 addCustomer:customer];

[customer setName:@"Jane Smith"];
[customer setCompanyName:@"Cupcakes by Jane"];

[user1 addCustomer:customer];

for (int i = 0; i < [[user1 customers] count]; i++) {
NSLog(@"%@",[[[user1 customers] objectAtIndex:i] name]);
}

我意识到这是行不通的,因为指向客户的指针正在被 Jane 覆盖,所以当打印数组时,其中的两个值都显示为“Jane Smith”。

每次用户决定添加客户/任务时,如何创建指向对象的新指针?或者我是不是把这一切都搞错了,应该对所有东西都使用数组而不是类?我觉得这是非常基本的面向对象编程,我正在努力思考它。任何帮助将不胜感激,谢谢!

最佳答案

如果每次有人按下并且只添加了一个客户,那么为什么要在同一个地方添加两次?可以在客户类中定义一个用于添加客户的简单工厂方法。首先在 Customer.h 中声明它:

+(Customer*)createCustomerWithName:(NSString*)name AndCompany:(NSString*)cp;

然后在 .m 中:

+(Customer*)createCustomerWithName:(NSString*)name AndCompany:(NSString*)cp
{
Customer *customer = [[Customer alloc] init];
[customer setName:name];
[customer setCompanyName:cp];
return customer;
}

然后在您的代码中,当您需要添加客户时,只需调用:

[user1 addCustomer:[Customer createCustomerWithName:@"ALan" AndCompany:@"MS"]];

然后随时调用它。您的问题应该已解决。

注意您必须在调用此工厂方法的类中导入 Customer.h。

关于objective-c - 应用组织 : Classes vs arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com