Если вы исследуете на _image
(либо NSLog
или в отладчике), это, вероятно, nil
. С initWithContentsOfFile
вы должны указать полный путь, например:
NSString *path = [[NSBundle mainBundle] pathForResource:@"TM-1P2" ofType:@"png"];
_image = [[UIImage alloc] initWithContentsOfFile:path];
В качестве альтернативы, вы можете использовать следующую команду, которая автоматически ищет изображения в комплекте:
_image = [UIImage imageNamed:@"TM-1P2.png"];
Этот последний синтаксис, imageNamed
, кэширует изображение (т. е. будет хранить его в памяти, даже если вы отклоните контроллер вида). Это здорово, если вам придется использовать один и тот же образ снова и снова в приложении (потому что ему не придется перезагружать его каждый раз), но если вы используете его только один раз, вам может не понадобиться использовать imageNamed
. Поскольку документация imageNamed
говорит:
Если у вас есть файл изображения, который будет отображаться только один раз, и хотите, чтобы убедиться, что он не добавляется в кэш системы, вы должны вместо этого создать изображение с помощью imageWithContentsOfFile:
. Это позволит сохранить одноразовый образ из кеша системы, что потенциально улучшит характеристики использования вашего приложения.
Обратите внимание, что оба они предполагают, что вы успешно добавили это изображение в свой комплект.
Если, с другой стороны, изображение находится в папке Documents
, вы можете загрузить его следующим образом:
NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [documentsPath stringByAppendingPathComponent:@"TM-1P2.png"];
_image = [[UIImage alloc] initWithContentsOfFile:path];
Наконец, следует отметить, что IOS устройства чувствительны к регистру (обычно тренажер не является) , поэтому убедитесь, что ваша капитализация правильная.
Unrelated на ваш вопрос, эти переменные в фигурных скобках, вероятно, не должны быть определены в @implementation
, а скорее вы должны поместить их в @interface
. Например, вы можете поместить их в файл .h, или лучше, вы можете поместить их в расширении частного класса в файле .m, прямо перед @implementation
:
@interface ViewController()
{
NSArray *_pArray;
UIImage *_image;
UIImageView *_imageView;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"TM-1P2" ofType:@"png"];
_image = [[UIImage alloc] initWithContentsOfFile:path];
_imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
[_imageView setImage:_image];
[_imageView setContentMode:UIViewContentModeScaleAspectFit];
[self.view addSubview:_imageView];
}
// ...
@end
Является ли этот вид контроллер контроллер вид корневой для вашего приложение? Вы пытались изменить цвет фона контроллера представления, чтобы убедиться, что он появляется? – bneely