2015-08-19 2 views
1

Я отправлю код, а затем объясню, что мне нужно.Основные данные. Назначьте значения в отношениях один-ко-многим.

две модели:

import Foundation 
import CoreData 

class TrainingDay: NSManagedObject { 

    @NSManaged var day: String 
    @NSManaged var trainingDetails: NSSet 

} 

и

import Foundation 
import CoreData 

class TrainingDetails: NSManagedObject { 

    @NSManaged var exerciseName: String 
    @NSManaged var repsNumber: String 
    @NSManaged var setsNumber: String 
    @NSManaged var trainingDay: TrainingDay 

} 

ОК, теперь у меня есть эти методы здесь:

func appendTrainingDay() { 
     let dayLabel = dayName.text 
     let dayEntity = NSEntityDescription.entityForName("TrainingDay", inManagedObjectContext: moc!) 
     let newTrainingDay = TrainingDay(entity: dayEntity!, insertIntoManagedObjectContext: moc) 
     newTrainingDay.day = dayName.text 

     var error: NSError? 
     moc?.save(&error) 

     if let err = error { 
      var status = err.localizedFailureReason 
      println("\(status)") 
     } else { 
      println("Training day:\(dayName.text)") 
    } 
} 

и

func appendTrainingDetailsToArray() { 
     let nameLabel = exerciseName.text 
     namesArray.append(nameLabel) 
     let numberOfSets = setsNumber.text?.toInt() 
     setsArray.append(numberOfSets!) 
     let numberOfReps = repsNumber.text?.toInt() 
     repsArray.append(numberOfReps!) 


     let detailsEntity = NSEntityDescription.entityForName("TrainingDetails", inManagedObjectContext: moc!) 
     let trainingdetails = TrainingDetails(entity: detailsEntity!, insertIntoManagedObjectContext: moc) 
     trainingdetails.exerciseName = exerciseName.text 
     trainingdetails.setsNumber = setsNumber.text! 
     trainingdetails.repsNumber = repsNumber.text! 

     var error: NSError? 
     moc?.save(&error) 

     if let err = error { 
      var status = err.localizedFailureReason 
      println("\(status)") 
     } else { 
      println("Training day:\(trainingdetails)") 
      println("Exercise: #\(exerciseName.text) saved successfully!") 
      println("Number of sets: #\(setsNumber.text) saved successfully!") 
      println("Number of reps: #\(repsNumber.text) saved successfully!") 
     } 
    } 

И они срабатывают здесь:

@IBAction func fixDayButton(sender: AnyObject) { 
     appendTrainingDay() 
    } 


    @IBAction func doneButton(sender: AnyObject) { 
     appendTrainingDetailsToArray() 
     exerciseTableView.reloadData() 
    } 

С этим сделано, что он должен был сделать, это: пользователь напечатает в день, как «понедельник», сохраните его в основных данных, и для этого конкретного дня , пользователь добавит много подробных объектов по своему усмотрению, которые будут заполнять tableView. Каждый из этих объектов содержит 3 атрибута: «exerciseName», «repsNumber» и «setsNumber». Кажется, что это происходит, вместо того, чтобы создать, например, один «покойный» объект и добавить много деталей к этому уже существующему, я создаю много «понедельников» и для каждого «понедельника», я создаю один подробный объект.

Как это исправить? Как я могу, внутри метода, который сохранит данные в основных данных, сделать выборку для этого конкретного дня, который я хочу, и заполнить его как можно большим количеством объектов?

-> Я уже установил отношения «один ко многим» и обратный между ними.

-> Я не знаю, как сделать правильный запрос выборки с предикатами, соответствующими тому, что я хочу найти.

-> Я новичок в Swift и имею небольшой опыт работы с C++.

Если кто-то может объяснить мне, как это сделать с примерами, я был бы очень, очень благодарен.

ответ

1

Установить связь trainingdetails.trainingDay. Если я не пропустил что-то, вы никогда не устанавливали эти отношения нигде.

EDIT:

Что-то вроде этого:

trainingdetails.trainingDay = selectedTrainingDay 

Чтобы получить доступ к trainingdetails вы просто принести на следующий день из основных данных и сделать что-то вроде этого:

foreach(TrainingDetails trainingDetails in selectedTrainingDay.trainingDetails) { 
    // Do stuff with the trainingDetails 

} 

Без лучшего понимания пользовательского интерфейса и рабочих процессов, я просто догадываюсь здесь. Обычно у такого типа есть два UITableViews - один, который перечисляет дни, и когда вы выбираете день, вы переходите к другому, в котором перечисляются дни обученияDetails. В вашем случае я предполагаю, что у вас есть представление календаря, и когда вы выбираете день из календаря, вы представляете список тренировокДетали для выбранного дня.

+0

Но где его установить? Прямо ниже trainingdetails.repsNumber = repsNumber.text! линия? Если да, то как мне восстановить день, в который будут назначены эти атрибуты? –

+0

@NicholasPiccoli см. Мой обновленный ответ –

Смежные вопросы