保存核心数据时显示指标 Swift

Show indicator when save core data Swift

我有一个按钮可以在核心数据中保存图片数据,但是当我按下它时,它会冻结,因为数据量很大。我确实尝试使用 dispatch_async 但它没有用。如何创建 icon/indicator 显示它是 loading/bookmarking 而不仅仅是冻结?

      @IBAction func save() {

    let content = self.foodMenu?["content"].string
    let urlString = self.foodMenu?["thumbnail_images"]["full"]["url"]
    let urlshare = NSURL(string: urlString!.stringValue)
    let imageData = NSData(contentsOfURL: urlshare!)
    let images = UIImage(data: imageData!)    


     dispatch_async(dispatch_get_main_queue(), {


    if let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext {


        self.foodClass = NSEntityDescription.insertNewObjectForEntityForName("Foods",
            inManagedObjectContext: managedObjectContext) as! Foods

        self.foodClass.content = content
        self.foodClass.image = UIImageJPEGRepresentation(images, 1)


        var e: NSError?
        if managedObjectContext.save(&e) != true {
            println("insert error: \(e!.localizedDescription)")
            return
        }
    }

首先,不太可能是保存速度慢。我怀疑您创建 JPEG 表示是缓慢的部分。

其次,您想通过放置微调器来隐藏问题。这确实对用户体验不利。执行以下操作更好(是的,它是更多代码);

  1. 将您的图像创建和保存移至后台队列。
  2. 重构您的 Core Data 堆栈,以便您保存到 磁盘 的数据位于私有队列中。

这涉及在 Core Data 中使用后台队列和多个上下文,但正确的答案是让此数据处理脱离用户界面线程。