在我的應用程序使用的核心數據,以保持有關用戶的一些基本信息,並輕鬆獲得的數據我創建了一個Assistant
類具有爲此事一些靜態功能。其中之一是:獲取請求執行方法什麼都不返回
static func fetchData(forEntity name: String) -> AnyObject{
var result: AnyObject!
let dataController = DataController().managedObjectContext
let fetchRequest = NSFetchRequest(entityName: name)
do{
result = try dataController.executeFetchRequest(fetchRequest)
}catch{
print("Failed to execute fetch request for \(name) entity")
}
print("Returning result: \(result.description)")
return result
}
的問題是,當我使用它print("Returning result: \(result.description)")
打印「返回結果:()」,它不是零,它只是一個空的AnyObject
我承擔。無論如何,如果我然後用這種方法:
static func getName() -> String{
let fetched = fetchData(forEntity: "UserData") as! [UserData]
if fetched.count > 0{
print("Returning found value: \(fetched.first!.username!)")
return fetched.first!.username!
}else{
print("Did not find any data, returning an empty string")
return ""
}
}
它返回一個空字符串。但是,如果我在另一個類中使用以下方法:
func initialize(){
do{
let fetch = NSFetchRequest(entityName: "UserData")
let entities = try dataController.executeFetchRequest(fetch) as! [UserData]
if entities.count > 0{
dispatch_async(dispatch_get_main_queue(), {self.fld_name.text = entities[0].username})
}else{
dispatch_async(dispatch_get_main_queue(), {self.fld_name.text = ""})
}
}catch{
print("Nope, nothing's here")
}
}
它工作得很好,數據的正確讀取。 這裏有您需要知道:我在使用AppDelegate
的application(application:, didFinishLaunchingWithOptions launchOptions:)
方法getName()
方法。因此,它可能是,CoreData不會在那一刻正常工作(我嚴重懷疑)
好吧,這裏是我的假設:
- 也許這個問題的發生是因爲返回
AnyObject
,因此我失去了所有數據? - 可能是因爲CoreData不是(以某種方式)在此時被激活?
- 這只是我犯的一些其他愚蠢的錯誤嗎?
請提出您的解決方案。先謝謝你!
嗯,首先,你會得到一個警告,轉換AnyObject爲[AnyObject]是多餘的。問題是我不應該創建另一個ManagedObjectContext的實例。不過謝謝你的關注 – EBDOKUM