有:
@interface MyClass : NSObject {
NSString *name; // retained and synthesized
NSString *address; // retained and synthesized
}
我正在创建一个数组:
NSMutableArray *myArray; // retained and synthesized
用几个MyClass对象填充它:
MyClass *kat = [MyClass new];
kat.name = @"somestring";
kat.address = @"someotherstring"
[myArray addObject:kat];
[kat release];
如何在某个索引处获取对象?下面的代码一直给我null,但它应该说明我需要的东西..
MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(
铸造是否有问题,或者我忘了什么?
答案 0 :(得分:6)
MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(
如果该代码正在打印(null)
,则无法,因为该数组为空或objectAtIndex:
失败。如果您尝试访问超出数组中对象计数的索引并且数组不能包含“holes”或nil引用,则objectAtIndex:
将抛出范围异常。
代码无故障运行的唯一方法是:
myArray
为零;您没有为myArray
分配和/或分配数组实例。
obj.address
返回nil;你没有正确初始化实例(它看起来你做了)。
答案 1 :(得分:3)
仅在@ property / @ synthesize对中声明myArray是不够的。你需要myArray也是非零的。你需要添加
myArray = [[NSMutableArray alloc] init];
在[addObject:]
来电之上的某个地方。
此外,由于您已将“myArray”变量声明为retain,如果您通过self.myArray = otherArray
将另一个(非零)数组设置为myArray,则myArray将为非零并保留并准备接受对象。
另外,如果你分配myArray,不要忘记在你的类的dealloc方法中释放它。