繁体   English   中英

iPhone Obj-C - 从NSMutableArray中检索自定义对象

[英]iPhone Obj-C - Retrieve custom object from NSMutableArray

有:

@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 :(

铸造有什么问题,或者我忘了什么?

MyClass *obj = (MyClass*)[myArray objectAtIndex:5];
NSLog(@"Selected: %@", obj.address); // = null :(

如果该代码是打印(null) ,则不能是因为该数组为空或objectAtIndex:失败。 objectAtIndex:如果您尝试访问超出数组中对象计数的索引并且数组不能包含“holes”或nil引用,则会抛出范围异常。

代码在没有发生事故的情况下运行的唯一方法是:

  • myArray是零; 您没有为myArray分配和/或分配数组实例。

  • obj.address返回nil; 你没有正确初始化实例(它看起来你做了)。

仅仅在@ property / @ synthesize对中声明myArray是不够的。 你需要myArray也是非零的。 你需要添加myArray = [[NSMutableArray alloc] init]; [addObject:]调用之上的某处。

此外,由于您已将“myArray”变量声明为retain,如果您通过self.myArray = otherArray将另一个(非零)数组设置为myArray, self.myArray = otherArray myArray将为非零并保留并准备接受对象。

另外,如果你分配myArray,不要忘记在你的类的dealloc方法中释放它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM