1

稍后,我将拥有从包含文件名的 .csv(逗号分隔文件)读取的对象。这就是为什么我要这样做。

我想要完成的是让按钮从 csv 中的文件名中获取图像。

到目前为止我尝试过的是:对象:

@interface question : NSObject
{
@private
UIImage *imageName;
}
@property (nonatomic, retain)UIImage *imageName;

(我已经尝试过使用 NSString 和 UIImage,两者都不像我想要的那样工作)

视图控制器:

- (void)viewDidLoad
{
[super viewDidLoad];
question *question1 = [[question alloc]init];
[question1.imageName initWithContentsOfFile:@"Default.png"];//Will be read from a csv later on, just typing it in manually for a test
testImage = question1.imageName;

}


-(void)imageshow
{
//(UIImage *)testImage;(NSString *)imageNameString; Didnt work
//[self.testImage initWithContentsOfFile:@"%@",questiont.imageName]; - Doesnt work either

[testButton setImage:testImage forState:UIControlStateNormal];


}
-(IBAction)test:(id)sender
{
[self imageshow];
}

此代码失败的地方是当我按下测试按钮时,什么也没有发生(不是崩溃)

我怎样才能正确地做到这一点?(将带有文本文件名的图像添加到 NSObject,然后在按钮/图像视图中显示它)

4

3 回答 3

1
   question1.img = [UIImage imageNamed:@"Default.png"]; 
    [testButton setImage:question1.img forState:UIControlStateNormal];

是的,您可以尝试以下动态图像

   question1.img = [UIImage imageNamed:[NSString stringWithFormat:"%@",imgName]];

imgName => 是图像的名称而不是图像示例:“abc.png”或“123.png”等

于 2013-02-27T08:04:13.297 回答
1

如果您的属性被命名imageName,访问器变量将自动命名_imageName

您在代码中使用了两个不同的变量。

@interface question : NSObject
{
   @private
   UIImage *_imageName;
}
@property (nonatomic, retain)UIImage *imageName;

imageName 不是包含图像的属性的好名称。它更适合字符串。

于 2013-02-27T08:12:36.157 回答
1

有一些事情需要改变。

仅出于常规原因,所有类名的开头都使用大写字母。它简化了阅读、论坛中的交流和避免错误。第二个名称变量,无论是口语还是抽象,最好是口语。但是不要选择像 imageName 这样的误导性名称。该变量中应该有一个名称,而不是图像,或者可能是显示名称的图形。:)

imageWithContentsOfFile需要一个完全限定的文件名。如果"Default.png" 是你的边界的一部分,正如我猜的名字一样,那么imageNamed:@"Default.png"就可以了。

setImage看起来几乎不错。当您的图像是 时,它当然不能工作(null)。但是,此时直接访问 iVar 并不是一个好的商业实践。你应该使用它的 setter/getter。改用:

[self.testButton setImage:self.testImage forState:UIControlStateNormal];

在你的情况下,它并没有太大的区别。但与其他约定类似,当您将代码与您在网络上找到的一些代码混合或在团队中工作时,它有助于避免错误。

于 2013-02-27T08:18:13.093 回答