2015-08-19 2 views
0

В настоящее время у меня есть приложение, загружающее данные в виде таблицы, представленным пользователю, чтобы я хотел, чтобы они выбрали объект, который они хотели бы просмотреть. Из них я хочу иметь возможность считывать данные в объекте пользователю в различных формах как с метками, так и с табличным просмотром, зависящим от данных.Передача объектов Core Data из UITableViewCell в другой Контроллер просмотра

Я читал и пытался понять это, но все это для меня все еще ново. У меня был еще один парень, который помог мне сэкономить данные и передать данные для хранения, но чтение его - это, по-видимому, другое. Любые примеры в быстром языке приведут меня к правильному пути, который я знаю, что мне нужно использовать метод didselectrow и вызвать segue, а также что мне нужно подготовиться к segue, но я не совсем уверен, как это должно выглядеть.

Я прочитал несколько сообщений, а некоторые действительно пытаются передать объекты, но не так, как я пытаюсь ... Вы можете передать целые объекты после того, как они были выбраны в виде таблицы в другом представлении контроллер для представления всех данных, относящихся к этому объекту, или вы можете передавать информацию только от этого объекта к следующему диспетчеру? У меня есть примеры prepareforsegue и выполнить segue, прежде чем не уверен, что еще мне не хватает, но в настоящее время я не могу передать какую-либо информацию между табличным представлением и viewcontroller.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "decktoRecord") { 

     var detailVC: StatWidgetViewController = segue.destinationViewController as! StatWidgetViewController 

     detailVC.deckRecord = decktoPass 

    } 

} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let indexPath = tableView.indexPathForSelectedRow() 

    let selectedCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell? 

    self.performSegueWithIdentifier("decktoRecord", sender: indexPath); 

} 

decktoPass - это просто переменная, которая содержит тип объекта данных, который является основным объектом объекта.

+0

Можете ли вы добавить некоторые сведения о том, как вы используете 'deckRecord' в StatWidgetViewController (какой-то код из этого класса был бы чрезвычайно полезен)? Что вы ожидаете увидеть и что вы на самом деле видите? Я также предлагаю установить контрольную точку в prepareforSegue, чтобы убедиться, что вы действительно попадаете в оператор if. –

+0

deckRecord должен быть просто переменной, которая позволяет мне передать объект из таблицы в следующий viewcontroller. Я чувствую, что я все это делаю неправильно. И вы можете дать мне пример того, как реализовать точку останова извините, я по-прежнему новичок во всем этом! – Matthew

+0

У Apple есть хорошая документация по использованию отладчика: https://developer.apple.com/library/ios/recipes/xcode_help-source_editor/chapters/Creating,Disabling, andDeletingBreakpoints.html Что касается вашего подхода, вы на правильном пути! Из того, что я вижу, deckRecord должен быть заполнен правильно, но ваша проблема может заключаться в том, как вы используете его в StatWidgetViewController, используете ли вы его для установки любых меток или таких? Если да, то в каком методе? –

ответ

2

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

Чтобы добавить контрольную точку исключения, откройте левую панель со всеми вашими файлами/диспетчерами просмотра, а на самой верхней части ее должна быть небольшая панель с несколькими значками, первая из которых - это папка, щелкните по второй последней один (тот, который похож на тег). щелкните по плюсу в правом нижнем углу и щелкните добавить контрольную точку исключения, это должно сообщить вам, где происходит проблема в вашем коде

Хорошо отредактировать детали в другом представлении запуск пула путем подготовки выхода из исходного контроллера представления

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "showTaskDetail" { 
      let detailVC: TaskDetailViewController = segue.destinationViewController as! TaskDetailViewController 
      let indexPath = self.tableView.indexPathForSelectedRow() 
      let thisTask = fetchedResultsController.objectAtIndexPath(indexPath!) as! TaskModel 
      detailVC.detailTaskModel = thisTask 
      detailVC.delegate = self 

     } 
     else if segue.identifier == "showTaskAdd" { 
      let addTaskVC:AddTaskViewController = segue.destinationViewController as! AddTaskViewController 
      addTaskVC.delegate = self 
     } 
    } 

okay так что, как показано выше, у меня есть segue, называемый showTaskDetail, который показывает детали того, что он есть, в моем случае это простая задача. Вы сказали, что хотите отредактировать эту информацию в другом контроллере представления, когда пользователь нажимает на строку, и вам нужно получить эту информацию в другом контроллере.

Так создать переменную в другой ViewController, который будет содержать эти значения, для меня я назвал его detailTaskModel

var detailTaskModel: TaskModel! 

Incase вы смущены о том, что TaskModel это, я использую CoreData хранить мои данные , а TaskModel - это класс NSMangedObject.

let detailVC: TaskDetailViewController = segue.destinationViewController as! TaskDetailViewController 

эта линия вы просто указать, что ваш другой контроллер взгляд, заменить TaskDetailViewController с быстрым классом.

let detailVC: TaskDetailViewController = segue.destinationViewController as! TaskDetailViewController 

эта строка извлекает данные из строки выбраны

Теперь вы должны быть в состоянии передать информацию в другой контроллер представления и редактировать его с помощью detailTaskModel, вам нужно помочь с этим, а?

+0

Да, в первую очередь, и до второй части LOL. У меня был ум. Я забыл о контрольных точках, как правило, я случайно нажимаю на LOL! Спасибо за ответ, я был так измотан вчера, что не смог четко мыслить .... – Matthew

+0

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

+0

Хорошо спасибо, я думаю, что я см. ваш ответ имеет огромную разницу в передаче данных по сравнению с тем, что я запрограммировал ... особенно в вашей подготовке к segue. Я понял, что мне нужно делать, но проблема для меня всегда приходит в эту строку кода 'let indexPath = self.tableView. indexPathForSelectedRow() 'Я пытался использовать это несколько раз, но я продолжаю получать одно и то же сообщение« Не могу вызвать «indexPathForSelectRow» без аргументов » – Matthew

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