使用对象的子类的属性

时间:2011-09-19 06:32:23

标签: iphone objective-c ios ios4 nsmutablearray

我的代码功能正常,但我收到了警告,所以我想我可以做得更好。我有一个NSObject(Objects)的子类,我有一个Objects子类(subObject)。我有一个在subObjects中声明的属性。我在一个NSMutableArray中存储了许多对象,这些对象都是Objects的不同子类。有时,我会通过数组并对某些对象执行某些操作。我从我的数组中读到这样的内容:

//I have declared an Objects "myObject" earlier in my code.
//c is an int used to select an object from the array
myObject = [arrayObjects objectAtIndex:c];

在这种情况下,我正在访问在subObject中声明为

的属性
[myObject property]

代码可以工作,因为我已经设置好了,所以如果不是subObject,它就不应该能够访问这段代码。但是,我收到警告,因为计算机不知道这一点。它只知道myObject是一个Objects,而不是一个subObject。我如何解决这个问题并摆脱警告?

2 个答案:

答案 0 :(得分:1)

在“确保”一切正确之前,必须确保从数组中获取的对象被声明为subObject类型。然后编译器将不再发出警告......

例如。类似的东西:

Object objO;

objO = [myarray objectAtIndex: n];

if (myMakingSure) {
    SubObject objS;
    objS = (SubObject) objO;
    x= [objS getProperty];
}

ps也确保你接受答案,如果他们是正确的 - 否则你可能会犹豫不决回答你的问题......(我一开始并不知道并且也得到了很好的说明)

答案 1 :(得分:1)

如果确定NSMutableArray中的所有对象都是SubObject类型(类型名称应以大写字母开头),那么您有以下几种可能:

  • 您可以直接将您提取的项目声明为SubObject:

    SubObject *myObject = [arrayObjects objectAtIndex: c];
    [myObject setProperty: 17];
    
  • 或者你演员:

    Object *myObject = [arrayObjects objectAtIndex: c];
    [(SubObject*)myObject setProperty: 17];
    
  • 或您只需使用 id 。如果您使用 id ,则编译器不会采取任何操作,也不会发出警告:

    id myObject = [arrayObjects objectAtIndex: c];
    [myObject setProperty: 17];