我知道我可以使用stringwithformat连接变量名,但是可以连接一个对象名吗?我没有运气解决这个问题。
image + 1.hidden = YES;例如。
如果我想循环一遍,比如10次,我将如何创建'image + 1'部分?
感谢您的帮助。
答案 0 :(得分:1)
将对象添加到NSArray
或NSMutableArray
。然后循环遍历数组以设置每个对象的属性。
答案 1 :(得分:1)
我不认为可以在目标c中连接对象名称,但是你可以创建一个图像数组,然后引用每个图像,如
image[0].hidden = YES;
这适合for循环。您还可以将图像(我假设它们是UIImages)添加到NSArray,然后像这样循环:
NSArray* arrayOfImages;
for(UIImage* image in arrayOfImages)
{
image.hidden = YES;
}
答案 2 :(得分:1)
出于讨论的目的,您可以使用键值编码按名称设置属性。因此,假设您有instance
,一个提供属性image1
,image2
和image3
的类的实例,那么您可以执行:
for(int x = 1; x < 4; x++)
{
// produce the name of the property as an NSString
NSString *propertyName = [NSString stringWithFormat:@"image%d", x];
// use key-value coding to set the property
[instance setValue:someValue forKey:propertyName];
}
有关兼容类导出的访问者方法的完整列表,请参阅NSKeyValueCoding Protocol Reference。 NSObject
实现NSKeyValueCoding
,声明为@property
并实现为@synthesize
的所有属性都符合要求,与具有合适访问者的任何其他属性一样。
正如在其他答案中已经提到的那样,当你想要的是一个有序的对象列表,以便你可以依次对每个对象做一些事情时,无论是C风格的数组还是NSArray是正确的继续进行的方式,出于风格原因,NSArray是首选。
答案 3 :(得分:0)
NSArray *array = [[NSArray alloc] initWithObjects:image1, image2, image3, image4, image5, image6, image7, image8, image9, image10, nil]; // or use NSMutableArray
for (int x = 0; x < 10; x++) {
((UIImage*)[array objectAtIndex:x]).hidden = YES;
}