检查stringWithFormat创建的字符串:

时间:2012-05-28 15:28:54

标签: objective-c cocoa-touch nsstring

为按钮设置图像时,我使用stringWithFormat:,如下所示:

 [buttonImage setImage:[ImgUtil image:[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]] ];

我想检查那个字符串。我想也许我可以从按钮上取回名字:

 if (buttonImage.image == [UIImage imageNamed:@"myImage_2.png"]) {
        NSLog(@"the name of the buttonImage is %@", buttonImage.image);
 }

但这不起作用。我怎么看那个字符串?

5 个答案:

答案 0 :(得分:3)

您可以使用关联引用在加载时将字符串“name”附加到字符串。您从文件创建UIImage,并使用objective-c关联的引用API附加名称:here.

您还可以对UIImage进行子类化以存储额外的名称。

您甚至可以添加类别以提供简单的API。

答案 1 :(得分:2)

如果您想要的是"测试" myImage_%d.png"最终成为"在以下行中:

[buttonImage setImage:[ImgUtil image:[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]] ];

然后我建议您重新格式化并简化代码。它将为您提供更易于阅读的额外优势:

NSString* imageName = [NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ];
NSLog(@"imageName is %@", imageName);

[buttonImage setImage:[ImgUtil image:imageName]];

答案 2 :(得分:2)

不,你不能。

buttonImage.image是存储在按钮内存中的UIImage。

[UIImage imageNamed:@"myImage_2.png"]创建了一个完全不同的UIImage。两个UIImages都可以从同一个文件创建 - 在本例中为@"myImage_2.png" - 但它们在内存中是两个独立的UIImages。

==检查您的行:

if(buttonImage.image == [UIImage imageNamed:@"myImage_2.png"])

不检查UIImages是否是从同一个文件创建的;它会检查它们是否指向内存中的相同位置。它们不是,因为它们是两个单独创建和存储的UIImage实例。

-

所以,不,你不能这样做。但是,可能以另一种方式解决问题的方法是继承UIButton并正确添加NSString* imageFilename。 (如果您为每个控件状态设置不同的图像,则需要多个变量来存储这些图像文件名)。然后覆盖UIButton子类的setImage:forControlState方法,并在每次更改图像时将文件名存储在那里。然后,您可以执行以下检查:

if([imageFileName isEqualToString:[[NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ]])

那会得到你想要的答案!

答案 3 :(得分:1)

您可以将UIImage存储为类的实例,并进行比较。你不会使用比指针更多的内存。

答案 4 :(得分:0)

selectNum代表所选图像,对吗?如果是,请在选择图片时尝试获取selectNum。