我正在使用objective-c中的iphone应用程序,我在使用类变量制作数组时遇到问题,例如......
我有一个名为Cube
的类,我正在尝试创建一个名为map的类的实例,这是一个数组
Cube map[10][10];
Xcode然后说这是一个错误,并建议我这样做
Cube *map[10][10];
当我这样做的时候虽然^我无法访问我在类Cube
中定义的我的方法之一,现在这不是我的所有方法,它只是一个单独的方法,我试图随时无法工作叫它。这个方法与其他方法唯一不同的是我将参数传递给它。 Cube
类声明和定义都可以完美地编译。
任何人都可以向我解释如何使用2维创建一个类而不将其转换为指针。另外为什么xcode建议我把它作为一个指针,为什么我这样做时方法不起作用?
答案 0 :(得分:2)
您可能希望使用Cocoa样式数组,即NSArray
或NSMutableArray
而不是C样式数组。它更加灵活,旨在与Objective-c对象一起使用。看看这个关于使用Cocoa数组的简单教程:http://iphonelearning.wordpress.com/2011/08/24/nsarray-and-nsmutablearray/。
答案 1 :(得分:2)
Objective-C中的标准方法是创建NSArray(or NSMutableArray)
NSArray
(或NSMutableArray
)。假设您希望在创建数组对象后能够操作数组,您的代码将如下所示:
NSMutableArray* cubeGrid = [NSMutableArray new]; // Note that this code assumes you are using ARC.
// add row 1
NSMutableArray* cubeRow1 = [NSMutableArray arrayWithObjects:cube1,cube2,cube3,nil]; // you will need to add cube 4 to 10 in the real code
[cubeGrid addObject:cubeRow1];
// add row 2
NSMutableArray* cubeRow2 = [NSMutableArray arrayWithObjects:cube11,cube12,cube13,nil]; // you will need to add cube 14 to 20 in the real code
[cubeGrid addObject:cubeRow2];
// and you will create the rest of the rows and add to the cubeGrid array
要访问元素,您可以执行以下操作:
for (id cubeRow in cubeGrid) {
if ([cubeRow isKindOfClass:[NSArray class]]) {
for (id cube in (NSArray*)cubeRow) {
if ([cube isKindOfClass:[Cube class]]) {
// Do things with cube
}
}
}
}
您可能还想要仔细检查的是您尝试访问的方法是否在头文件中声明。
答案 2 :(得分:0)
您可能需要查看此this答案。