Быстрый элемент пуст

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

func currentWorkout() -> Workout? {
    let client = currentClient()
    return (appointment?.workouts as? Set<Workout>)?.first(where: { $0.client == client })
}

private func currentCard() -> Card? {
    return currentWorkout()?.card
}

private func currentClientPlannedExercises() -> [ExerciseInfo] {
    if let currentCard = currentCard(), let template = currentCard.template, let exerciseSets = template.exerciseSets?.array as? [ExerciseSet] {
        let numCardsWithThis = (template.cardsWithThisTemplate as? Set<Card>)?.filter { $0.client != currentClient() }.count ?? 0
        let exercsiseSetNumber = numCardsWithThis % exerciseSets.count
        if let result = exerciseSets[exercsiseSetNumber].exercises?.array as? [ExerciseInfo] {
            return result
        }
    }
    return [ExerciseInfo]()
}

private func currentExercise() -> Exercise? {
    // we can't have an exercise without a selection
    guard let selectedExercise = currentExerciseInfo(), let currentCard = currentCard() else{
        return nil
    }
    // get the first exercise on the current card that has the same exercise info as the one selected
    if let exercises = currentWorkout()?.exercises as? Set<Exercise>{
        return exercises.first(where: { $0.exerciseInfo == selectedExercise })
    }
    let exercise = Exercise(context: context)
    exercise.workout = currentWorkout()
    exercise.exerciseInfo = selectedExercise
    //TODO: Set Seat
    return exercise
}
private func currentExerciseInfo() -> ExerciseInfo? {
    guard let selectedRow = exercisesTableView.indexPathForSelectedRow else {
        return nil
    }
    return currentClientPlannedExercises()[selectedRow.row]
}

Столкнулись с проблемой при извлечении данных из основных данных, верно?

Abhirajsinh Thakore 18.04.2018 14:51

либо это, либо они не сохраняются в основные данные

Matt Brown 18.04.2018 14:56

Добавлен ответ для извлечения данных из основных данных My Way. Надеюсь, это поможет, если проблема в добавлении, я знаю, что я обновлю код для вас.

Abhirajsinh Thakore 18.04.2018 15:04

В чем проблема?

matt 18.04.2018 15:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

если проблема возникает, вы можете использовать этот код:

Для получения данных из Core Data

    var tasks: [Task] = [] //Your Entity Name in Bracket

    func getData() {
  do {
    tasks = try context.fetch(Task.fetchRequest()) //Instead of Task your Entity Name
    } catch {
      print("Fetching Failed")
    }
  }

И используйте это так:

for data in tasks{
        print(data.name) // All the Attributes name after data.attributename
        print(data.address)
    }

Если он находится в tableView:

let data = tasks[indexPath.row]
 print(data.name)

Вы получите данные, если они есть.

Изменить, чтобы проверить, введены ли данные или нет

Распечатайте путь следующим образом:

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

Перейдите в файл sqlite, откройте и проверьте, есть ли внутри него данные.

Изменить Если вы столкнулись с проблемой при добавлении данных в основные данные

Простой код для добавления данных

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let task = Task(context: context) //Entity Name here instead of Task
task.name = taskTextField.text! // Attribute name here after task.attributename

// Save the data to coredata
(UIApplication.shared.delegate as! AppDelegate).saveContext()

Надеюсь на эту помощь.

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

Matt Brown 18.04.2018 15:14

Итак, я предполагаю, что значение не вводится

Abhirajsinh Thakore 18.04.2018 15:14

но я вижу это изменение в функции textFieldDidBeginEditing

Matt Brown 18.04.2018 15:15

Вы пробовали мою функцию для извлечения данных из основных данных? Отредактировал ответ, чтобы проверить данные прямо в БД

Abhirajsinh Thakore 18.04.2018 15:17

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

Matt Brown 18.04.2018 15:28

@MattBrown Отредактировал ответ, чтобы сохранить данные по-моему, я почти использую это в каждом проекте, и он работает как шарм. Попробуйте сохранить, используя это, и получить, используя мой способ. Если это сработает для вас, не забудьте принять мой ответ. ваше здоровье!

Abhirajsinh Thakore 18.04.2018 15:29

Я обнаружил, что проблема заключалась в функции currentExercise, которая не вызывала первое упражнение, пока не было выполнено упражнение. Я исправил, переписав строку, если let упражнения = currentWorkout () ?. упражнения как? Установите <Exercise>, пусть firstExercise = plays.first (где: {$ 0.exerciseInfo == selectedExercise}) {return firstExercise

Matt Brown 18.04.2018 15:58

В любом случае, если это помогло вам, то вы можете одобрить мой ответ на это. Помог вам в обнаружении шагов

Abhirajsinh Thakore 18.04.2018 16:34

Я обнаружил, что проблема заключалась в функции currentExercise, которая не вызывала первое упражнение, пока не было выполнено упражнение. Исправил переписав функцию

private func currentExercise() -> Exercise? {
    // we can't have an exercise without a selection
    guard let selectedExercise = currentExerciseInfo() else{
        return nil
    }
    // get the first exercise on the current card that has the same exercise info as the one selected
    if let exercises = currentWorkout()?.exercises as? Set<Exercise>, let firstExercise = exercises.first(where: { $0.exerciseInfo == selectedExercise }) {
        return firstExercise
    }
    let exercise = Exercise(context: context)
    exercise.workout = currentWorkout()
    exercise.exerciseInfo = selectedExercise
    //TODO: Set Seat
    return exercise
}

Другие вопросы по теме