尝试在Objective-C中连接对象名称

时间:2011-07-20 23:08:35

标签: iphone objective-c concatenation

我知道我可以使用stringwithformat连接变量名,但是可以连接一个对象名吗?我没有运气解决这个问题。

image + 1.hidden = YES;例如。

如果我想循环一遍,比如10次,我将如何创建'image + 1'部分?

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

将对象添加到NSArrayNSMutableArray。然后循环遍历数组以设置每个对象的属性。

答案 1 :(得分:1)

我不认为可以在目标c中连接对象名称,但是你可以创建一个图像数组,然后引用每个图像,如

image[0].hidden = YES;

这适合for循环。您还可以将图像(我假设它们是UIImages)添加到NSArray,然后像这样循环:

NSArray* arrayOfImages;

for(UIImage* image in arrayOfImages)
{
    image.hidden = YES;
}

答案 2 :(得分:1)

出于讨论的目的,您可以使用键值编码按名称设置属性。因此,假设您有instance,一个提供属性image1image2image3的类的实例,那么您可以执行:

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 ReferenceNSObject实现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;
}