Массив не загружает файлы PNG, экспортированные из After Effects: ios, xcode

Наш графический дизайнер отправляет нам файлы .PNG с соответствующими именами «hide_00~iphone.png», «hide_00@2X~iphone.png» и т. д.

Он экспортирует изображения из After Effects. Я добавляю их в проект и пытаюсь загрузить в массив при инициализации. Каждый раз выбрасывается исключение для всех его файлов. Теперь, если я войду И ПЕРЕИМЕНУЮ файлы в поисковике на одно и то же имя, все будет нормально компилироваться. Я понятия не имею, что здесь происходит. Xcode не может найти их в файловой системе, пока я их не переименую. Но имя ТОЧНО такое же, как то, что он мне прислал. Я проверил наличие пробелов вокруг имени его файла, но все выглядит нормально.

Кто-нибудь знает, размещает ли After Effects странную информацию в заголовках изображений? Или это вообще кому-то знакомо. Мы работаем с целой кучей изображений, и мне не хотелось бы переименовывать их вручную.


person frankie    schedule 12.09.2012    source источник
comment
Можете ли вы поместить одно из изображений в общедоступную папку DropBox, а затем прикрепить URL-адрес к этому файлу? Что вам нужно сделать, так это получить файл, который не работает, заархивировать его, разархивировать и убедиться, что он по-прежнему не работает, а затем загрузить файл .zip (в противном случае, если zip/unzip решит проблему, мы не сможем помочь).   -  person David H    schedule 13.09.2012
comment
Да, вот публичная ссылка: dl.dropbox.com/u/538153/ hide_step_seq_06%7Eiphone.png Одна вещь, которую я забыл упомянуть, тоже очень странная. Изображения загружаются нормально, используя imageWithName, но я загружаю их с помощью imageWithFileContents. Таким образом, один метод массива в порядке, другой терпит неудачу - то есть, если я не переименую их   -  person frankie    schedule 13.09.2012
comment
Посмотрите на URL-адрес, который вы только что разместили - это не почтовый индекс, как я просил, но файл iphone.png имеет префикс% 7E - между 06 и phone.png.   -  person David H    schedule 13.09.2012
comment
Извините за это dl.dropbox.com/u/538153/hide_step_seq.zip Я пробовал архивировать и распаковывать файлы, но это не помогло. Я также попробовал выполнить пакетное сохранение из Photoshop. Спасибо.   -  person frankie    schedule 13.09.2012
comment
В вашем комментарии выше распаковка zip была предложена не как «исправление» проблемы, а как тест, чтобы убедиться, что это НЕ решит проблему и, таким образом, сделает невозможным тестирование другими.   -  person David H    schedule 13.09.2012
comment
Если это не очевидно, это очень плохой способ добавить содержимое фильма в приложение для iOS. Вы собираетесь использовать всю память приложения и много процессорного времени для декодирования большого количества изображений в формате PNG, подобных этому. Гораздо лучший подход — сначала преобразовать изображения PNG в анимированный формат на рабочем столе. См. stackoverflow.com/a/13850242/763355.   -  person MoDJ    schedule 24.03.2016


Ответы (1)


Поэтому я просто использовал imageNamed, и изображение загрузилось просто отлично. Таким образом, очевидно, что ваша процедура загрузки изображения по пути/имени ошибочна. Вы можете опубликовать это, и это можно оценить, но это не имеет ничего общего с «After Effects».

РЕДАКТИРОВАТЬ: Для справки: моя система — Lion Xcode 4.4.1, а мой проект установлен для iOS 5.1. Я взял ваш файл из дропбокса и убедился, что в моем проекте я МОГУ загрузить изображение, как вы пытаетесь сделать:

for (int i = 6; i < 7; i++) {
    NSString *path = [NSString stringWithFormat:@"hide_step_seq_%02d", i];
    UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:path  ofType:@"png"]];
    NSLog(@"PATH %@ image=%@", path, image);
}
2012-09-13 07:15:23.241 Searcher[58114:f803] PATH hide_step_seq_06 image=<UIImage: 0x6a4cb30>

Итак, куда идти отсюда? Я пытался помочь нескольким людям, которые обожглись суффиксами @2x или ~iphone. По какой-то причине некоторые люди не могут заставить это работать - все, о чем я могу думать, это то, что глубоко в системе есть какой-то флаг, который переключается, и нет никакого способа его отключить.

Я предлагаю попробовать использовать фактическое полное имя файла — попробуйте добавить ~iphone и посмотреть, сработает ли это.

Вы также можете в Терминале сделать 'ls *.png | od -c' перед изменением имени и после, чтобы убедиться, что символы абсолютно одинаковы.

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

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

person David H    schedule 13.09.2012
comment
но вы не читали пост. код не меняется, имя изображения меняется, а затем загружается нормально. code NSMutableArray *seq = [[NSMutableArray alloc] init]; for (int i = 0; i ‹ 15; i++) { [seq addObject: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat: @hide_step_seq_%02d, i] ofType: @png]]]; } code - person frankie; 13.09.2012
comment
кроме того, (как упоминалось выше) он нормально загружается с imageNamed. Вот что странно. Это imageWithContentsOfFile, который не загружает изображение, пока оно не будет переименовано. Кто-нибудь может воссоздать? - person frankie; 13.09.2012
comment
Добро пожаловать, и спасибо за благодарность. Недостатком «imageNamed» является то, что эти изображения кэшируются системой, поэтому я полностью понимаю, почему вы хотите загружать их так, как вы пытаетесь. Пожалуйста, обновите свой вопрос, если вы когда-нибудь найдете способ заставить его работать. - person David H; 13.09.2012