【发布时间】:2015-03-20 14:27:39
【问题描述】:
使用 Master/Detail Core Data 模板时,我遇到了一个奇怪的问题,但想象这只是我的头脑。当解析一个包含大约 800 名学生的 JSON 文件时,这些项目几乎会立即添加到 TableView 中,这很好。我遇到的问题是,当尝试将它们保存到 Core Data 上下文时,应用程序似乎暂停了近一分钟。
@IBAction func loadStudents(sender: AnyObject) {
var appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
var context: NSManagedObjectContext = appDel.managedObjectContext!
let urlPath = NSURL(string: "**URL REMOVED**")
let sharedSession = NSURLSession.sharedSession()
let task = sharedSession.dataTaskWithURL(urlPath!, completionHandler: { (data, response, downloadTaskError) -> Void in
println("Download Complete")
if (downloadTaskError != nil) {
println("Download Error: \(downloadTaskError!.localizedDescription)")
} else {
var studentJSONParseError: NSError?
var studentJSONData = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &studentJSONParseError) as NSArray
if (studentJSONParseError != nil) {
println("JSON Parsing Error: \(studentJSONParseError!.localizedDescription)")
} else {
for var i = 0; i < studentJSONData.count; i++ {
var student = studentJSONData[i] as NSDictionary
println("\(i) \(student)")
var newStudent = NSEntityDescription.insertNewObjectForEntityForName("Student", inManagedObjectContext: context) as Student
newStudent.firstName = student["STUDENT_FIRSTNAME"] as NSString
newStudent.lastName = student["STUDENT_SURNAME"] as NSString
newStudent.usualName = student["STUDENT_USUAL"] as NSString
newStudent.grade = student["STUDENT_GRADE"] as NSNumber
newStudent.id = student["STUDENT_ID"] as NSString
context.save(nil)
}
}
}
})
task.resume()
}
【问题讨论】: