2016-03-01 59 views
1

我使用CoreSpolight框架将值分配给CSSearchableItem。我想优化图像加载。CoreSpotlight索引 - 图像加载

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 
} 

它需要大量的时间和应用程序被吊下来,而图像下载。

thumbnailURL不起作用。图像未分配

当我尝试在后台下载它时。它不分配图像到CSSearchableIndex和图像不显示

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 
     } 
} 

回答

0

这里我们去吧!问题修正

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 
     } 
}