Fetch Request 执行方法returns 无
Fetch Request execution method returns nothing
在我的应用程序中,我使用 Core Data 来保存有关用户的一些基本信息并轻松获取数据,我创建了一个 Assistant
class,它具有一些静态函数。其中之一如下:
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)")
打印 "Returning result: ()" 但它不是零,我认为它只是一个空的 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 ""
}
}
它returns 一个空字符串。但是,如果我在另一个 class:
中使用以下方法
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 尚未(以某种方式)激活?
- 这只是我犯的其他愚蠢错误吗?
请提出您的解决方案。提前致谢!
您有一些问题可能会导致麻烦。首先,我将重写您的 fetchData 函数。
static func fetchData(forEntity name: String) -> [AnyObject] {
let dataController = DataController().managedObjectContext
let fetchRequest = NSFetchRequest(entityName: name)
do{
let results = try dataController.executeFetchRequest(fetchRequest)
print("Returning result: \(results.description)")
return results
} catch {
print("Failed to execute fetch request for \(name) entity")
return []
}
}
exexuteFetchRequest
的 return 类型是 AnyObject
的 Array
类型,而不只是一个。
对于您的 getName()
函数,我将执行以下操作。它使用 if let 绑定来安全地处理您的结果。
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 ""
}
}
试一试,看看是否有帮助。至少,这段代码要安全得多,如果出现任何问题,崩溃的可能性也小得多。
问题是每次我需要获取数据时,我都在创建一个新的 DataController().managedObjectContext
实例,并且不知何故在没有任何异常的情况下逃脱了。我的解决方案(有效)是将一个实例放入委托中并使用它。它起作用了,但是,正如我所说,我不知道为什么它以这种方式起作用而在其他情况下却不起作用。很抱歉我的无知,但我很高兴我刚刚修复了它,如果你能给我一个解释,我想得到一个解释。
在我的应用程序中,我使用 Core Data 来保存有关用户的一些基本信息并轻松获取数据,我创建了一个 Assistant
class,它具有一些静态函数。其中之一如下:
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)")
打印 "Returning result: ()" 但它不是零,我认为它只是一个空的 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 ""
}
}
它returns 一个空字符串。但是,如果我在另一个 class:
中使用以下方法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 尚未(以某种方式)激活?
- 这只是我犯的其他愚蠢错误吗?
请提出您的解决方案。提前致谢!
您有一些问题可能会导致麻烦。首先,我将重写您的 fetchData 函数。
static func fetchData(forEntity name: String) -> [AnyObject] {
let dataController = DataController().managedObjectContext
let fetchRequest = NSFetchRequest(entityName: name)
do{
let results = try dataController.executeFetchRequest(fetchRequest)
print("Returning result: \(results.description)")
return results
} catch {
print("Failed to execute fetch request for \(name) entity")
return []
}
}
exexuteFetchRequest
的 return 类型是 AnyObject
的 Array
类型,而不只是一个。
对于您的 getName()
函数,我将执行以下操作。它使用 if let 绑定来安全地处理您的结果。
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 ""
}
}
试一试,看看是否有帮助。至少,这段代码要安全得多,如果出现任何问题,崩溃的可能性也小得多。
问题是每次我需要获取数据时,我都在创建一个新的 DataController().managedObjectContext
实例,并且不知何故在没有任何异常的情况下逃脱了。我的解决方案(有效)是将一个实例放入委托中并使用它。它起作用了,但是,正如我所说,我不知道为什么它以这种方式起作用而在其他情况下却不起作用。很抱歉我的无知,但我很高兴我刚刚修复了它,如果你能给我一个解释,我想得到一个解释。