2016-02-01 3 views
1

У меня есть сущность в основных данных, представляющая модель тренировки. Каждый объект имеет атрибут DayID, который представляет, в какой день элемент попадает, как показано на изображении.Выбор определенных элементов из основных данных

enter image description here

код для создания и сохранения определенного элемента будет показано ниже в Swift

@IBAction func doneButtonPressed(sender: AnyObject) { 

     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let managedObjectContextCreation = appDelegate.managedObjectContext 
     let entityDescription = NSEntityDescription.entityForName("ExerciseItemModel", inManagedObjectContext: managedObjectContextCreation) 

     //Sunday 
     let exerciseItemtoAdd = ExerciseItemModel(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContextCreation) 

     exerciseItemtoAdd.dayID = dayName //DayName could be Wednesday 
     exerciseItemtoAdd.exerciseType = "Cardio" 
     exerciseItemtoAdd.exerciseName = self.exerciseNameTextField.text! 
     exerciseItemtoAdd.durationOrSets = durationLabelTextArea.text! 
     exerciseItemtoAdd.distanceOrReps = distanceLabelTextArea.text! 
     exerciseItemtoAdd.weight = "" 
     exerciseItemtoAdd.date = currentDate 


     appDelegate.saveContext() //Save the elements I just created. 


     let request: NSFetchRequest = NSFetchRequest(entityName: "ExerciseItemModel") 

     do { 

      _ = try managedObjectContextCreation.executeFetchRequest(request) 
      // success ... 
     } catch let error as NSError { 
      // failure 
      print("Fetch failed: \(error.localizedDescription)") 
     } 


     self.dismissViewControllerAnimated(true, completion: nil) 



    } 

я могу получить элементы, специфичные для дня, например, Среда в cellForRowAtIndexPath, используя следующий код:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let exerciseItem = fetchedResultController.objectAtIndexPath(indexPath) as! ExerciseItemModel 

//Check if the DayID is the same as a specific WeekDay e.g. Wednesday 
if exerciseItem.dayID == self.weekDayModel.dayName { 

//All the code here 

} 



    return Cell! 


} 

Проблема Я, следовательно, перед как мне определить numbeOfRows в функции секции для только возвращает количество элементов, имеющих отношение к конкретному DAYNAME. например. Я хочу только количество предметов, чей DayID - среда. В настоящий момент функция возвращает все объекты, включая те, у которых есть другие dayID с воскресенья по субботу, и, следовательно, искажает TableView.

Вот моя numberOfRowsInSection функция:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     //let exerciseItem = fetchedResultController. 

     //if exerciseItem.dayID == self.weekDayModel.dayName { 

     //} 

     numberOfExerciseItems = fetchedResultController.sections![section].numberOfObjects 
     return fetchedResultController.sections![section].numberOfObjects 


    } 

Любые мысли или помощь очень ценится. :)

+1

Вы, наверное, хотели бы иметь NSPredicate экран данные. – Allen

+0

Любая идея о том, как это выполнить. Я довольно новичок в NSPredicate. Я делаю свое исследование на стороне, чтобы выяснить, как это сделать. @Allen – Gugulethu

ответ

2

Вы хотите добавить предикат к вашему NSFetchRequest так:

let request: NSFetchRequest = NSFetchRequest(entityName: "ExerciseItemModel") 
request.predicate = NSPredicate("dayID == %@",self.weekDayModel.dayName) 
+0

Спасибо за это @null – Gugulethu

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