В моем приложении я использую Core Data, чтобы хранить базовую информацию о пользователе и легко получить данные. Я создал класс Assistant
, который имеет некоторые статические функции. Один из них заключается в следующем:Fetch Запрос метода выполнения ничего не возвращает
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")
}
}
Он работает отлично и данные считываются правильно. Вот что вам нужно знать: я использую метод getName()
в методе AppDelegate
application(application:, didFinishLaunchingWithOptions launchOptions:)
. Так что может быть, что CoreData не работает корректно в тот момент (который я сильно сомневаюсь)
Хорошо, вот мои предположения:
- Может эта проблема происходит из-за возвращения
AnyObject
и поэтому я потеряю все данные? - Возможно, это потому, что CoreData еще не активирован (так или иначе)?
- Является ли это какой-то другой глупой ошибкой?
Пожалуйста, предложите ваши решения. Заранее спасибо!
Ну, в первую очередь вы получите предупреждение о том, что преобразование AnyObject в [AnyObject] является избыточным. Проблема заключалась в том, что я не должен был делать другой экземпляр ManagedObjectContext. Но спасибо за ваше внимание в любом случае – EBDOKUM