I am assigning values to CSSearchableItem using CoreSpolight framework. I want to optimise image loading.
func setupSearchableContent(moviesInfo:NSMutableArray)
{
if #available(iOS 9.0, *)
{
var searchableItems = [CSSearchableItem]()
for i in 0...(moviesInfo.count - 1)
{
let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
// Set the title
searchableItemAttributeSet.title = (moviesInfo[i] as! ICFAssetObject).title!
// Movie Image
if let tempPosterImage = (moviesInfo[i] as! ICFAssetObject).portraitImage()
{
searchableItemAttributeSet.thumbnailData = getImageFromURL(tempPosterImage) //imageData
}
// Set the Description
searchableItemAttributeSet.contentDescription = (moviesInfo[i] as! ICFAssetObject).description!
//Set the Link and Slug
let values = NSString(format: "%@||%@", (moviesInfo[i] as! ICFAssetObject).link!,(moviesInfo[i] as! ICFAssetObject).slug!)
let searchableItem = CSSearchableItem(uniqueIdentifier:values as String ,domainIdentifier: "taimur_assets", attributeSet: searchableItemAttributeSet)
searchableItem.expirationDate = NSDate.distantFuture()
searchableItems.append(searchableItem)
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([searchableItem])
{
(error: NSError?) -> Void in
if let error = error
{
print("Indexing error: \(error.localizedDescription)")
}
else
{
print("Search item successfully indexed!")
}
}
}
}
else
{
// Fallback on earlier versions
}
}
func getImageFromURL(var fileURL:String) -> NSData
{
fileURL = NSString(format: "%@/180x180", fileURL) as String
let data:NSData = NSData(contentsOfURL: NSURL(string: fileURL)!)!
return data
}
It takes lot of time and application is hanged while the images are downloaded.
thumbnailURL doesn't work. Images are not assigned
When I try to download it in the background. It doesn't assign images to the CSSearchableIndex and Images are not displayed
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0))
{
let data:NSData = self.getImageFromURL(movie.Image) //imageData
dispatch_async(dispatch_get_main_queue())
{
searchableItemAttributeSet.thumbnailData = data
}
}
Here we Go! Issue Fixed
let priority = DISPATCH_QUEUE_PRIORITY_BACKGROUND
dispatch_async(dispatch_get_global_queue(priority, 0))
{
let data:NSData = self.getImageFromURL(movie.Image) //imageData
dispatch_async(dispatch_get_main_queue())
{
searchableItemAttributeSet.thumbnailData = data
}
}