保存核心数据时显示指标 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 表示是缓慢的部分。
其次,您想通过放置微调器来隐藏问题。这确实对用户体验不利。执行以下操作更好(是的,它是更多代码);
- 将您的图像创建和保存移至后台队列。
- 重构您的 Core Data 堆栈,以便您保存到 磁盘 的数据位于私有队列中。
这涉及在 Core Data 中使用后台队列和多个上下文,但正确的答案是让此数据处理脱离用户界面线程。
我有一个按钮可以在核心数据中保存图片数据,但是当我按下它时,它会冻结,因为数据量很大。我确实尝试使用 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 表示是缓慢的部分。
其次,您想通过放置微调器来隐藏问题。这确实对用户体验不利。执行以下操作更好(是的,它是更多代码);
- 将您的图像创建和保存移至后台队列。
- 重构您的 Core Data 堆栈,以便您保存到 磁盘 的数据位于私有队列中。
这涉及在 Core Data 中使用后台队列和多个上下文,但正确的答案是让此数据处理脱离用户界面线程。