【发布时间】:2012-04-04 04:48:55
【问题描述】:
我知道 Apple 非常重视让您使用 NS 对象而不是真正的原始类型,但我需要数组的功能(即直接访问索引处的项目)。然而,他们似乎非常热衷于使用NS 对象,以至于我在网上或教科书中找不到关于如何使用基本原始数组的教程。 我想要在 Java 中做这样的事情:
String inventory[] = new String[45];
inventory[5] = "Pickaxe";
inventory[12] = "Dirt";
inventory[8] = "Cobblestone";
inventory[12] = null;
System.out.println("There are " + inventory.length + " slots in inventory: " + java.util.Arrays.toString(inventory));
以下是我在 Objective-C 中得到的最接近的,但它不能正常运行:
NSString *inventory[45];
inventory[5] = @"Pickaxe";
inventory[12] = @"Dirt";
inventory[8] = @"Cobblestone";
inventory[12] = nil;
NSArray *temp = [NSArray arrayWithObjects:inventory count:45];
NSLog(@"There are %i slots in inventory: %@", [temp count], [temp description]);
另外,如果可能的话,O-C 中是否有一些东西可以让我计算数组中非空/非零对象的数量? (这样,我就可以知道物品栏中还剩下多少空间,这样玩家就无法打包任何东西了)
【问题讨论】:
-
它不起作用是很自然的。 [NSArray arrayWithObjects:inventory];将要求
inventory是可变参数的列表。用户 [NSArray arrayWithObjects:count:] 代替。 -
不要忘记,objective-c 是建立在 C 之上的,因此任何标准的 C 代码都可以工作。如果您不确定如何使用,只需搜索 C 数组的示例即可。
-
@H2CO3 谢谢你!但是,在其中放置
nil值仍然会引发异常 -
那是你的错!集合对象do 在获得
nil时抛出异常,并且记录了此行为。在将 nil 传递给初始化方法之前,您应该检查它。
标签: objective-c arrays data-structures nsarray primitive