我正試圖解決從CoreData
提取數據比從Parse中檢索數據並將其保存到CoreData
之前執行更早的問題。我如何實現一個隊列來執行從Parse提取數據?現在,當我啓動應用程序時,數據庫已更新,但tableView
中未顯示。GCD和核心數據
從CoreData
檢索數據:
func fetchFromCoreData() {
do {
let results = try context.executeFetchRequest(fetchRequest)
medicines = results as! [Medicine]
print("FetchFromCoreData")
tableViewMedicines.reloadData()
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
讀取數據從parse:
func fetchFromParse() {
let entity = NSEntityDescription.entityForName("Medicine", inManagedObjectContext: context)
let query = PFQuery(className: PFUser.currentUser()!.username!)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if error == nil {
for object in objects! {
if let name = object["medicineName"] as? String,
amount = object["amountQuantity"] as? String,
time = object["time"] as? String
{
let predicate = NSPredicate(format: "name = %@", name)
self.fetchRequest.predicate = predicate
do{
let fetchedEntities = try self.context.executeFetchRequest(self.fetchRequest) as! [Medicine]
//save to Core Data
if fetchedEntities.count <= 0 {
let medicine = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: self.context)
medicine.setValue(name, forKey: "name")
medicine.setValue(amount, forKey: "amount")
medicine.setValue(time, forKey: "time")
}
} catch let error as NSError{
print(error)
}
}
}
}
do {
try self.context.save()
print("Context.save")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
self.fetchFromCoreData()
}
}
我打電話給他們viewWillAppear
:
override func viewWillAppear(animated: Bool) {
if Reachability.isConnectedToNetwork() {
//fetching data from Parse
fetchFromParse()
fetchFromCoreData()
tableViewMedicines.reloadData()
} else {
//fetching data from Core data
fetchFromCoreData()
logOutButton.enabled = false
}
}
我編輯了我的帖子。我在viewWillAppear中調用它們,但不知道它有什麼區別 – kiuzio2
我不知道你會怎麼做,但是你可能不得不調用'fetchFromCoreData'方法中的'fetchFromParse'方法,這樣你就可以得到首先解析數據。您將測試網絡連接,然後從解析中獲取數據,否則您只會從磁盤獲取數據。 –
這可能是因爲你的'findObjectsInBackground'回調將在未來的某個時刻被執行;在你重新加載你的表格數據之後。一個提示是重新考慮你調用tableViewMedicines.reloadData()的位置。 –