2015-01-16 4 views
0

Я использую представление коллекции, чтобы отображать изображения, хранящиеся в CoreData, только несколько (около 15), но когда я прокручиваю его вниз, он задерживается, потому что я не извлекаю свои данные асинхронно, возможно ли это с только 15 UIImages?Asynchronous Fetching Swift Xcode

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

Это то, что прибыл, чтобы сделать некоторые биты из учебников

let entity = NSEntityDescription.entityForName("Dreams", inManagedObjectContext: contxt) 

    let fetchRequest = NSFetchRequest() 
    fetchRequest.entity = entity 

    let asyncFetch = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { 
     (result:NSAsynchronousFetchResult!) -> Void in 

     if result.finalResult!.count > 0 { 
      self.dreams = result.finalResult! as [Dream] 
     } 
     NSLog("Done.") 
    } 

Снов представляет собой массив типа [Мечта], но когда я показываю вид коллекции ничего не появляется Это, как я делал это ранее

let fetchRequest = NSFetchRequest(entityName: "Dreams") 

    if let fetchResults = contxt.executeFetchRequest(fetchRequest, error: nil) as? [Dream] { 
     dreams = fetchResults 
    } 

Он работал очень хорошо,

большое спасибо за вашу помощь

+0

Асинхронный выбор может помочь, но, возможно, нет. Это зависит от того, как структурирован ваш код, поэтому переход async может быть ключевым или может быть пустой тратой времени. Например, где вы выполняете эти выборки? Вы делаете индивидуальные выборки для каждого изображения или выбираете их партиями? И действительно ли изображения хранятся в постоянном хранилище или во внешних файлах? –

+0

Не храните изображения в основных данных, если это возможно, просто сохраняйте имена изображений и/или пути к файлам – Ian

+0

Теперь я сохранил изображения в CoreData как NSData, я загрузил изображения в поле зрения, загрузился, и нет, я не использую партии Я попробую, что вы предлагаете (путь к файлу) –

ответ

1

К сожалению, у меня нет времени предлагать конкретный код в этом случае. Однако я хотел бы представить базовую стратегию. Извлечение на основной поток крайне маловероятно, чтобы быть вашей проблемой здесь, но выборки сразу все-таки определенно могут быть, особенно при использовании больших двоичных данных. Это следует ускорить, если:

  1. Вы начинаете использовать NSFetchedResultsController с хорошим размером партии, а не с запросом необработанной выборки. NSFetchedResultsController немного увлекается обновлениями с представлениями коллекций способами, которые выходят за рамки конкретной области этого вопроса, но они работают очень хорошо после правильной настройки.
  2. Вы храните изображения в виде файлов вместо самих основных данных и вместо этого сохраняете путь к файлу. Затем эти данные изображения не будут загружаться в память каждый раз, когда вы ошибаетесь в объекте, и вы можете просто загружать и отображать изображения, когда ячейки появляются на экране, используя этот URL-адрес файла.

Люди, которые настаивают на сохранении двоичных данных в Core Data, обычно обнаруживают, что сохранение данных как единственного атрибута в отдельном объекте «Изображение» с отношением к сущности, которую вы показываете, помогает. Объект изображения (вместе с его бинарными данными изображения) может быть сохранен с ошибкой и, следовательно, не в памяти, даже если объект, который вы выбираете для просмотра коллекции, находится в памяти. Однако я предпочитаю не хранить их в Core Data и просто обрабатывать полученные атомарности gotchas и возможность того, что файл Core Data указывает, что он каким-то образом удалился.