在我的应用程序中,我使用Core Data保存一些关于用户的基本信息,并轻松获取我创建的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)")
打印“返回结果:()”并且它不是nil,它只是一个空的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")
}
}
它运行良好,数据正确读取。
以下是您需要了解的内容:我使用getName()
的{{1}}方法中的AppDelegate
方法。因此可能是CoreData在那一刻无法正常工作(我非常怀疑)
好的,这是我的假设:
application(application:, didFinishLaunchingWithOptions launchOptions:)
而导致出现此问题,因此我丢失了所有数据?请建议您的解决方案。提前谢谢!
答案 0 :(得分:0)
您有一些可能导致问题的问题。首先,我会重写你的fetchData函数。
exexuteFetchRequest
Array
的返回类型是AnyObject
getName()
,而不仅仅是static func getName() -> String {
if let
fetched = fetchData(forEntity: "UserData") as? [UserData],
userData = fetched.first,
username = userData.username {
print("Returning found value: \(username)")
return username
} else {
print("Did not find any data, returning an empty string")
return ""
}
}
。
对于var html = $(IndexBannerTpl).filter('#tpl-banner1').html();
var template = _.template(html, {items: items_ibm});
功能,我会执行以下操作。它使用if绑定来安全地处理结果。
shouldAutorotate
给它一个旋转,看看是否有帮助。至少,如果出现任何问题,此代码更安全且不太可能崩溃。
答案 1 :(得分:0)
问题在于,每次我需要获取数据时,我都在创建DataController().managedObjectContext
的新实例,并且不知何故在没有任何异常的情况下离开了。我的解决方案(有效)是将一个实例放入委托并使用它。它起作用了,但是,正如我所说,我不知道为什么它以这种方式工作而在其他方面不起作用。我很抱歉我的无知,但我很高兴,我只是修好了,如果你能给我一个解释,我想得到一个解释。