2016-09-21 6 views
0

У меня возникают проблемы с реализацией coredata в моем проекте. он, похоже, способен сэкономить, но не получить. вот кодРеализация CoreData swift 3

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
    let entity = NSEntityDescription.entity(forEntityName: "Utente", in: context) 
    let item = NSManagedObject(entity: entity!, insertInto: context) 
    var utente: Profilo? = nil 
    let vc = CustomTabBarController() as UIViewController 
    let vc1 = LoginController() as UIViewController 
    // Configure Fetch Request 

    do { 
     let request: NSFetchRequest<NSFetchRequestResult> = Profilo.fetchRequest() 
     let result = try context.fetch(request) as Profilo 
     utente = result as Profilo 
     print() 
     if utente?.type != nil { 
      if utente?.type == "students"{ 
       print("students") 
        present(vc, animated: true, completion: nil) 
      } 
      if utente?.type == "parents"{ 
       print("parents") 
       present(vc, animated: true, completion: nil) 

      } 
      if utente?.type == "teachers"{ 
       print("teachers") 
       present(vc, animated: true, completion: nil) 

      } 
     } else { 
      print("variable type empty") 
      present(vc1, animated: true, completion: nil) 

     } 
    } catch { 
     let fetchError = error as NSError 
     print(fetchError) 
    } 

я также получаю ошибку на строке результата: не может ссылаться на «загрузить» со списком аргументов типа (NSFetchRequest)

+0

Можете ли вы опубликовать свое сохранение на основные данные, пожалуйста, у меня с ним проблемы. Благодаря ! – user3739902

+0

Я только что скопировал ответ ниже, но теперь он не работает, потому что я изменил модель. Я выясняю, как заставить его работать снова. –

+0

Мне удалось сделать мою работу с сердечниками, поэтому, если вы хотите, я могу опубликовать ее в качестве ответа здесь. – user3739902

ответ

1

Как мы договорились, я отправляю свои основные функции данных, они могут быть не лучшим образом, но они работают в моем проекте. Моя сущность называется Целями.

// MARK: - Core data funcitons 

func loadCoreData(){ 
    goalsArray.removeAll() 

    //let request = NSFetchRequest<Goals>(entityName:"Goals") 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

do{ 
let fetchRequest : NSFetchRequest<Goals> = Goals.fetchRequest() as! NSFetchRequest<Goals> 
let sortDescriptor = NSSortDescriptor(key: "id", ascending: false) 
fetchRequest.sortDescriptors = [sortDescriptor] 

let result = try context.fetch(fetchRequest) 
    for result in result { 
     goalsArray.append(result) 
     print("Fetched result goaltitle is \(result.goalTitle!)") 
    } 
    tableView.reloadData() 

print("I've fetched the results") 
} 
catch { 
    fatalError("Sthh") 
    } 
} 



func countCoreDataObjects()-> Bool{ 
      //let request = NSFetchRequest<Goals>(entityName:"Goals") 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    do{ 
     let fetchRequest : NSFetchRequest<Goals> = Goals.fetchRequest() as! NSFetchRequest<Goals> 
     let result = try context.fetch(fetchRequest) 
     if result.count == 0 { 
      return false 
     } else {return true 

     } 
    } 
    catch { 
     fatalError("Sthh") 
    } 

} 


func saveToCD(object: goalClassForPassing){ 

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
    let entity = NSEntityDescription.entity(forEntityName: "Goals", in: context) 
    let goal = NSManagedObject(entity: entity!, insertInto: context) as! Goals 



    goal.goalTitle = object.goalName 
    goal.id = String(describing:Date()) 
    goal.imagePath = object.imagePath 

    do { 
     try context.save()} 
    catch { 
     fatalError("couldn't save to core data") 
    } 


    goal.id = String(describing: Date()) 
    goalObjectToSaveToCD?.id = String(describing: NSDate()) 
    print(goalObjectToSaveToCD?.goalTitle) 
    print("Saved \(goal.goalTitle) - \(goal.id) - \(goal.imagePath) to Core Data") 
    loadCoreData() 
} 
2

Синтаксис должен быть

let request: NSFetchRequest<Profilo> = Profilo.fetchRequest() 
let result = try context.fetch(request) as! [Profilo] // returns always an array. 

Учтите, что инициализаторы по умолчанию CustomTabBarController() и LoginController() не будут работать.

+0

почему они не работают? –

+0

Инициализатор по умолчанию создает новые пустые экземпляры контроллеров, которые не такие же, как те, что были разработаны в раскадровке. – vadian

+0

да, но я не использую раскадровку. Это те взгляды, которые я хочу показать, если условия выполнены. Каким будет синтакс? –