我的代码功能正常,但我收到了警告,所以我想我可以做得更好。我有一个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。我如何解决这个问题并摆脱警告?
答案 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];