我正在尝试创建一个为我生成发票的应用(我的第一个)。最初我的想法是拥有以下课程:
我想我可以让用户选择“添加新客户”,这将创建一个Customer对象,然后将该对象存储到客户数组中。 “添加新任务”也是如此,它将创建一个Task对象并将其添加到任务数组中。然后,我就可以创建一个Invoice对象,该对象指向customer数组中的某个值和tasks数组中的多个任务。
我遇到的问题是,每当有人按下“添加新客户”或“添加新任务”时,我都不知道如何创建新对象。我尝试过这样的事情:
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”。
每次用户决定添加客户/任务时,如何创建指向对象的新指针?或者我是否会将这一切都弄错,应该使用数组而不是类?我觉得这是非常基本的OOP,我正在努力绕过它。非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
如果每次按下并且只添加一个客户,那么为什么要在同一个地方添加两次? 可以在客户类中定义用于添加客户的简单工厂方法。 首先在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"]];
随时打电话给你。你的问题应该解决了。
N.B。您必须在您调用此工厂方法的类中导入Customer.h。
答案 1 :(得分:0)
试试这个:
Customer *customer = [[Customer alloc] init];
[customer setName:@"John Doe"];
[customer setCompanyName:@"John's Swimming Pools"];
[user1 addCustomer:customer];
[customer release]; // if NOT using ARC
// or "customer = nil;" if using ARC
// now initialize a second customer object
customer = [[Customer alloc] init];
[customer setName:@"Jane Smith"];
[customer setCompanyName:@"Cupcakes by Jane"];
[user1 addCustomer:customer];
[customer release]; // if NOT using ARC; otherwise this won't compile
for (int i = 0; i < [[user1 customers] count]; i++) {
NSLog(@"%@",[[[user1 customers] objectAtIndex:i] name]);
}
在添加第一个客户之后,我不是100%肯定“customer = nil;
”事情(如果且仅在使用ARC时),但重要的是您需要实例化第二个Customer对象以及何时将它添加到数组中,您将拥有两个单独的客户对象和记录。