如果有人想知道这是什么,我正在为BNR ObjC指南做挑战。我创建了一个名为WCDStockHolding的自定义类,它具有属性“name”,“currentPrice”,“purchasePrice”和“numberOfShares”。我要求用户告诉程序他们有多少馆藏然后多次迭代以将馆藏分配为NSMutableArray中的班级实例。问题是,我的阵列中所有WCDStockHoldings的名称都改为最后添加的名称。经过多次调试后,我认为这是由于我的setName实例方法。我做错了什么?我似乎无法弄清楚这一点。数组中对象的所有其他方面都很好。
setName实现:
- (void)setName: (char*)n
{
_name = n;
}
减少主要功能:
NSMutableArray* stockArray = [[NSMutableArray alloc] init];
char Stocks[100];
printf("Enter Number of Stocks: ");
scanf("%s", Stocks);
int stocks = strtod(Stocks, NULL);
for (int i=0; i<stocks; i++)
{
WCDStockHolding* holding = [[WCDStockHolding alloc] init];
printf("[%d] Enter Stock [Name], [Purchase Price], [Current Price], and [Number of Shares]", i);
printf("\nSeparated by commas (w/ no spaces) like above ");
printf("\n>> ");
char string[100];
/* Declared name,PP,CP,and NS */
char* items[100];
scanf("%s", string);
/* used strtok to split string into separate elements in array of strings 'item */
name = items[0]; //name
PP = strtof(items[1], NULL); //purchasePrice
CP = strtof(items[2], NULL); //currentPrice
NS = strtod(items[3], NULL); //numberOfStocks
[holding setName:name];
[holding setPurchsePrice:PP];
[holding setCurrentPrice:CP];
[holding setNumberOfShares:NS];
[stockArray insertObject:holding atIndex:i];
}
答案 0 :(得分:0)
好的,我明白了。而不是在WCDStockHolding中使用_name作为char *我将其更改为NSString以及main中的所有方法。我还使用了一个单独的for循环来分配馆藏,并在&#39;设置中引用它们。 for循环作为数组的调用,它们已被添加到。
使用分配循环:
for (int i=0; i<stocks; i++)
{
WCDStockHolding* holding = [[WCDStockHolding alloc] init];
[stockArray addObject:holding];
}
将_name作为NSString处理并通过数组引用设置ivars:
for (int i=0; i<stocks; i++)
{
// request input form user
char string[100];
NSString* name = [[NSString alloc] init];
// declare other variables
char* items[100];
scanf("%s", string);
// use strtok to split string into items
name = [NSString stringWithUTF8String:items[0]];
// ...set others seen in initial question
[[stockArray objectAtIndex:i] setName:name];
// same as question in besides reference via array like above line
}