我刚接触iphone。我正在开发一个应用程序,我们需要从一个对象数组中计算它。
我创建了一个NSObject类"目录",其中包括catalogue_Value和catalogue_quantity。现在,假设我的数组中有两个目录对象,那么我需要计算总值。
这是我的代码:
int initialTotalPoints = 9999;
int totalUsedPoints = 0;
for (int i = 0; i<[arrayCheckout count];i++)
{
Catalogue *catalog = [[Catalogue alloc] init];
catalog = [arrayCheckout objectAtIndex:i];
NSLog(@"checkout voucher %d is = %d*%d", i, catalog.catalogue_Value,catalog.catalogue_quantity);
totalUsedPoints = catalog.catalogue_Value * catalog.catalogue_quantity;
}
initialTotalPoints = initialTotalPoints-totalUsedPoints;
问题是由于for循环,总是需要&#34; totalUsedPoints&#34;我的最后一个数组对象。但实际上,我需要添加&#34; catalog.catalogue_Value,catalog.catalogue_quantity&#34;在我的&#34; totalUsedPoints&#34;根据我的总数组对象。请帮我解决这个问题。谢谢!
答案 0 :(得分:1)
如果您只想总结每个目录的数量*值
int totalPoints = 0;
for (int i = 0; i<[arrayCheckout count];i++) {
Catalogue *catalog = [arrayCheckout objectAtIndex:i];
totalPoints += catalog.catalogue_Value * catalog.catalogue_quantity;
}
// totalPoints is now the sum of each arrays catalogue_Value*catalogue_quantity
你可以查看Blockskit,这是一个很好的包,可以让数组迭代更容易
答案 1 :(得分:0)
这里没有具体的目标c。您使用新值覆盖totalUsedPoints
的每个循环。然后你不用它,它会被覆盖。在循环结束时,它只包含分配给它的最后一个值。
我认为你在寻找的是:
totalUsedPoints += catalog.catalogue_Value * catalog.catalogue_quantity;
+=
等于:
totalUsedPoints = totalUsedPoints + catalog.catalogue_Value * catalog.catalogue_quantity;
表示将为其分配前一个值,再加上新值
答案 2 :(得分:0)
这是计算机科学101的东西,不是Objective-C独有的。其他人已经发布了有关您做错了什么以及如何解决问题的信息。我想指出代码中的另一个缺陷。看看这两行:
Catalogue *catalog = [[Catalogue alloc] init];
catalog = [arrayCheckout objectAtIndex:i];
在第一行中,您将创建一个新的空目录对象,并在变量catalog
中保存指向它的指针。在下一行中,您将从arrayCheckout对象中获取一个对象,并在目录变量中保存指向它的指针。您最终会丢弃之前创建的对象。
这就像制造一辆全新的汽车,把它放在你的房子前面,然后将它从一个停车场的编号停车位中取出并取出现有的汽车。
在ARC中,您在第一个对象中创建的空目录对象将在下一行中被释放,因此您不会泄漏内存,但创建一个立即丢弃的对象毫无意义且浪费。 (内存分配是像iOS这样的操作系统中最慢的任务之一。它必须进行内核调用)
如果您的程序使用手动引用计数,那么您将泄漏Catalog对象。它永远不会被取消分配。这两行应该是这样的:
Catalogue *catalog;
catalog = [arrayCheckout objectAtIndex:i];
甚至是1行:
Catalogue *catalog = [arrayCheckout objectAtIndex:i];