【问题标题】:Inspecting the string created by stringWithFormat:检查由 stringWithFormat 创建的字符串:
【发布时间】:2012-05-28 15:28:53
【问题描述】:

在为按钮设置图像时,我使用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);
 }

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

【问题讨论】:

  • 我回答的 How to get Image Name used in an UIImage? 可能重复
  • @EvanMulawski:我不认为它是重复的。
  • @nhahtdh:是的。他想得到UIImage对象所代表的图像的名称。
  • @EvanMulawski:问题可能相同,但目的和设置不同。
  • @nhahtdh:题名一样,题本身一样,最终结果一样。因此,这是同一个问题。

标签: objective-c cocoa-touch nsstring


【解决方案1】:

您可以使用关联引用在加载时附加一个字符串键“名称”。您从文件中创建 UIImage,并使用 Objective-c 关联引用 API 附加名称:here.

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

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

【讨论】:

  • 我认为关联参考可能是一个很好的解决方案。不过,我不喜欢为这种微不足道的任务进行子分类。
【解决方案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]];

【讨论】:

  • 这就是我想要的。工作得很好。感谢您的帮助!
  • @hanumanDev:你想要的只是那个字符串的值?!这个问题完全是误导。 UIImage 与此无关。
【解决方案3】:

不,你不能。

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

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

== 签入您的线路:

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 ]])

这会让你得到你想要的答案!

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      selectNum 代表选中的图片吧

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-12
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 1970-01-01
        相关资源
        最近更新 更多