У меня есть собственный подкласс кнопок в моем приложении, который при нажатии отображает анимацию пользовательского индикатора активности.Он реализован с серией из 32 изображений с использованием свойства UIImageView
animationImages
.Загрузка всех этих изображений связана с заметной задержкой, поэтому я кеширую их в статический массив в кнопке и загружаю их в фоновом режиме при запуске.Они называются «buy_anim0001.png» - «buy_anim0032.png».У меня есть этот метод, и я называю его в конце application:didFinishLaunchingWithOptions
:
+(void)setup
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
CFTimeInterval start = CACurrentMediaTime();
NSMutableArray<UIImage *> *images = [[NSMutableArray alloc] init];
int numImages = 32;
for (int i = 1; i <= numImages; i++)
{
NSString *title = [NSString stringWithFormat:@"buy_anim%04i.png", i];
UIImage *img = [UIImage imageNamed:title];
[images addObject:img];
}
CFTimeInterval end = CACurrentMediaTime();
NSLOG(@"Took %.3f seconds to load buy button images", end - start);
dispatch_async(dispatch_get_main_queue(), ^{
_images = images;
});
});
}
У меня никогда не было сбоев здесь, в разработке или во внешнем бета-тестировании приложения, но теперь я вижу отчеты о сбояхотсюда, жалуясь на «[__NSArrayM insertObject: atIndex:]: object не может быть nil».
Некоторые примечания:
- Все сбои на iOS 12 (потому что эта версияприложение требует iOS 12, а 13 все еще на расстоянии нескольких часов от доставки)
- Приложение работает в фоновом режиме 75% времени, но я пытался заставить это произойти, пока приложение нена переднем плане, и у меня нет сбоев.
- Я дважды проверил наименование изображения, но если бы это было проблемой, то это было бы обнаружено в отладке или бета-версии.
- Там нетпроблемы с именами в именах файлов.
- Не существует @ 2x версий изображений, и они находятся в проекте, а не в каталоге ресурсов, поэтому я не думаю, что проблема заключается в прореживании приложения.
Итак ... что может заставить UIImage imageNamed
вернуть nil
один раз в агПовторите время, когда имя изображения будет правильным?
Обновление: Я обнаружил, что размещение изображений в каталоге ресурсов вместо пакета заставляет их загружаться в порядке быстрее (aсекунды или две с точностью до одной десятой секунды).Это, вероятно, устраняет необходимость загружать их в фоновом режиме, поэтому я по крайней мере буду делать это в следующем выпуске.Это может решить проблему.