попытка инициализировать изменяемый массив, а затем загрузить его с изображениями, на которые ссылается имя - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь написать свое первое приложение для iOS, которого нет в книге (хотя, думаю, я собираю вещи как сумасшедшие ....)

На данный момент я пытаюсь инициализировать изменяемый массив, а затем загрузить его с изображениями, на которые ссылается имя (они входят в проект).

Это то, что у меня есть до сих пор, и, исходя из того, что я вижу в отладчике, мой массив пуст.


- (void)viewDidLoad
{
    txtLabel = [[UILabel alloc] init];
    imageView = [[UIImageView alloc] init];
    imageArray = [[NSMutableArray alloc] init];
    seg = [[UISegmentedControl alloc] init];

    imageArray = [[NSMutableArray arrayWithObjects: 
                        [UIImage imageNamed:@"jupiter2.JPG"],
                        [UIImage imageNamed:@"waffles?.JPG"],
                        [UIImage imageNamed:@"enterprise.JPG"],
                        [UIImage imageNamed:@"wrunning.JPG"],
                        [UIImage imageNamed:@"ApolloCSM.JPG"],
                        nil] retain];

    imageView.image = [UIImage imageNamed:@"happy-face.JPG"];
    txtLabel.text = @"Hi there!";

    [super viewDidLoad];
}

Спасибо за любую помощь.

С уважением,

Стив О'Салливан

Ответы [ 4 ]

1 голос
/ 19 августа 2010

У вас есть

imageArray = [[NSMutableArray alloc] init];

и затем

imageArray = [[NSMutableArray arrayWithObjects: ...

Это утечка.Избавьтесь от первого.

Но для второго вам нужно использовать [[NSMutableArray alloc] initWithObjects:..., чтобы он застрял.

0 голосов
/ 20 сентября 2015

Попробуйте это ..

-->Remove this. imageArray = [[NSMutableArray alloc] init];
-->Try this.
imageArray = [[NSMutableArray alloc]initWithObjects: 
                        [UIImage imageNamed:@"jupiter2.JPG"],
                        [UIImage imageNamed:@"waffles?.JPG"],
                        [UIImage imageNamed:@"enterprise.JPG"],
                        [UIImage imageNamed:@"wrunning.JPG"],
                        [UIImage imageNamed:@"ApolloCSM.JPG"],
                        nil];

Если нет особой причины,

[super viewDidLoad];

поставьте это сверху.

0 голосов
/ 19 августа 2010

Попробуйте выделить изображения в отдельной строке и посмотреть, есть ли у вас указатель:

UIImage *jupImg = [UIImage imageNamed:@"jupiter2.JPG"];

Если это значение равно null, дважды проверьте правильность имени файла и убедитесь, что «Копировать ресурсы комплекта» фактически копирует.изображение, где его можно найти.

Если у вас есть указатель, попробуйте получить доступ к некоторым его значениям, таким как ширина и высота, чтобы увидеть, имеют ли они смысл.

-

РЕДАКТИРОВАТЬ

Подождите немного.Я подумал об этом и вспомнил похожую проблему, с которой я столкнулся некоторое время назад.

Мне кажется, проблема в том, что мы используем изменяемые массивы, а не статические массивы.Метод, который вы используете для инициализации массива, не полностью определен для изменяемого массива.

Я думаю, вы должны попробовать что-то вроде:

NSMutableArray *imageArray = [[NSMutableArray alloc] init];

[imageArray addObject:[UIImage imageNamed:@"jupiter2.JPG"]];
... add other images here ...

После этого я держу пари, что теперь у вас действительно есть что-то в вашем массиве.

0 голосов
/ 19 августа 2010

Вы должны уточнить, когда "когда" вы видите массив пустым. Вы уверены, что viewDidLoad был вызван при отладке?

а также ... в примере кода это вам не нужно, тем самым вы создаете утечку памяти

imageArray = [[NSMutableArray alloc] init]; 

Кроме того, нет ничего плохого в том, как вы строите массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...