2010-08-24 3 views
0

я загружаю очень большой файл в NSimage с этим кодом:NSImage initWithContentsOfFile: прогресс дисплей

[[NSImage alloc] initWithContentsOfFile:aFile] 

Эта операция займет немного времени. Я хочу показать статус загрузки в моем пользовательском интерфейсе. Как можно прочитать или рассчитать прогрессию?

Спасибо.

+0

Знаете ли вы, что является узким местом? - декодирование данных или чтение данных с диска. Если последний можно попробовать сначала загрузить как NSData и показать прогресс этого. –

ответ

1

Инициализация изображения by referencing the file, что не позволит загрузить его сразу. Затем установите себя как делегат изображения и ответьте на сообщения с добавочной загрузкой, которые являются частью the NSImageDelegate protocol. Затем попытайтесь спросить изображение для некоторой информации о себе (с просьбой о его представлении, вероятно, будет хорошим способом), чтобы заставить изображение начать загрузку.

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

+0

Не удалось ли упаковать процесс загрузки в отдельную нить? Затем поток может отправлять уведомления о его прогрессе время от времени, на которое приложение может реагировать и обновлять другие элементы пользовательского интерфейса. Добавьте объект изображения в стек представления после его полной загрузки. Пока объект NSImage не является частью стека представления и основного потока, я не знаю, почему он должен что-то блокировать. – Toastor

+0

Я ожидал бы, что сообщение 'представления '(или что-то еще) будет заблокировано до тех пор, пока изображение не будет полностью загружено, что будет самое раннее, когда оно вернет полное значение. Вы правы, что можете сделать это из потока, но я не могу поколебать смутное ощущение, что один из других API (возможно, CGImageSource?) Позволит вам загружать изображение асинхронно, не создавая нить самостоятельно. –

+0

У меня есть эта идея, но мой делегат никогда не звонит. Это очень странно. – Pixman