2016-05-01 3 views
1

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

@IBAction func favoritesSelected(sender: AnyObject) 
{ 
    if toggleState == 1 
    { 
     sender.setImage(UIImage(named:"Star Filled-32.png"),forState:UIControlState.Normal) 
     isFav = true 

     var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     var context:NSManagedObjectContext = appDel.managedObjectContext 

     var newFave = NSEntityDescription.insertNewObjectForEntityForName("Favorites", inManagedObjectContext: context) as NSManagedObject 
     newFave.setValue("" + nameLabel.text!, forKey: "favorite") 

     do 
     { 
      try context.save() 
     } 
     catch _ 
     { 
      print("error") 
     } 

     //print("\(newFave)") 
     print("Object saved") 

     toggleState = 2 
    } 

С кодом, приведенным выше, вы можете увидеть, что происходит, когда пользователь нажимает кнопку избранного. Изображение изменяется и загружает имя в основные данные.

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

Я покажу, что у меня в этом классе, но я уверен, что это неправильно.

if (result == 2) 
    { 
     var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     var context:NSManagedObjectContext = appDel.managedObjectContext 

     var request = NSFetchRequest(entityName: "Favorites") 
     request.returnsObjectsAsFaults = false 

     do 
     { 
      var results:NSArray = try context.executeFetchRequest(request) 

      if (results.count <= 0) 
      { 
       print("Either all object deleted or error") 
      } 
     } 
     catch _ 
     { 
      print("error") 
     } 


    } 
    else 
    { 
     print("no show") 
    } 

ответ

1

Вариант 1: NSNotification запускает Tableview перезарядку:

Зарегистрируйте UITableView tableView с уведомлением:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "contextDidSave:", name: NSManagedObjectContextDidSaveNotification, object: nil) 

func contextDidSave(sender: NSNotification) { 
    tableView.reloadData() 
} 

Когда пользователь щелкает на звезде в первом примере, и контекст был сохранен правильно, будет выполнен обратный вызов contextDidSave, и tableView будет загружаться с последним состоянием в БД

Вариант 2: Настройка UITableView с NSFetchedResultsController

С этой опцией, когда пользователь нажимает на звезды и контекст сохраняется, IOS будет инициировать обновление выбранных ячеек автоматически. Смотрите эту статью для справки:

https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/

0

В моих приложениях с любимой функцией я сделал следующее:

1) На моих модели объектов имеет BOOL свойства любимых, со значением по умолчанию ложный.

2) В представлении таблицы, в котором перечислены все объекты, когда пользователь нажимает кнопку избранного, установите для свойства избранного в соответствующем объекте модели значение true и сохраните контекст управляемого объекта.

3) В представлении таблицы, в котором вы хотите отобразить объекты, запрошенные для поиска, запросите основные данные для всех ваших объектов модели с любимым свойством, которое является истинным и отображает эти результаты. Как упоминалось в ответе Кристофера Харриса, это тривиально, если вы используете NSFetchedResultController.

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