2013-02-27 1 views
1

У меня будут объекты, прочитанные из .csv (Comma seperated file), который позже будет содержать имена файлов. Вот почему я пытаюсь сделать это так.Добавление изображения в NSObject - возможно?

То, что я хотел бы сделать, это заставить кнопку получить изображение из имени файла в csv.

Что я пытался до сих пор: Объект:

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

(я попытался с NSString не Aswell, как UIImage, ни работает, как я хочу их)

ViewController:

- (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, а затем показать его в/зрения изображения кнопки)

+0

где ваш @ "Default.png" магазин? –

+0

@GuoLuchuan В папке поддерживающих файлов, это только черное фоновое изображение по умолчанию. –

+0

попробуйте следующее: question1.img = [UIImage imageNamed: @ "Default.png"]; [testButton setImage: question1.img forState: UIControlStateNormal]; – yunas

ответ

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» и т.д.

+0

Удивительный, именно то, что я хотел. Большое спасибо. –

1

если ваше свойство называется imageName переменная аксессора автоматически по имени _imageName.

В вашем коде используются две разные переменные.

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

imageName не является отличным именем для свойства, содержащего изображение .. оно лучше подходит для строки.

+0

Да, это было изначально предназначено для струны, но я просто играл вокруг и не беспокоился о создании всех причудливых имен для всего. –

1

Есть некоторые вещи, которые нужно изменить.

По обычным причинам пишите все имена классов с верхним регистром в начале. Это облегчает чтение, обмен в форумах как SO и позволяет избежать ошибок. Второе имя является переменным, говорящим или абстрактным, предпочтительнее. Но не выбирать ошибочное имя такого образа. В этой переменной должно быть имя, а не изображение, или, может быть, графическое изображение, отображающее имя. :)

imageWithContentsOfFile ожидает полное имя файла. Если "Default.png "является частью вашей boundle, как я полагаю, по его имени, то imageNamed:@"Default.png" будет делать.

Ваш setImage выглядит почти хорошо. Он не может работать, конечно, в то время как ваше изображение (null). Однако, это не хороший бизнес Practis доступ к Ивар направить в этот момент вы shoudl использовать его сеттер/геттер используйте вместо этого:..

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

в вашем случае это не делает большой разницы Но подобно другим конвенциям помогает избегая ошибок, когда-либо. вы смешиваете свой код с кодом, который вы нашли в Интернете или когда работаете в команде.