2015-03-28 2 views
-2

Детали во втором UITableViewController

Мое приложение представляет собой простой Recipebook понять UITableViewControllers. Приложение содержит два UITableViewControllers. Первый UITableViewController содержит UITableView со списком имен рецептов. Если вы выберете ячейку, вы перейдете ко второму UITableViewController. Второй UITableViewController содержит UITableView со списком ингредиентов.Objective C - Передача данных между двумя UITableViewControllers

Приложение содержит следующие классы:

  • RecipeTableViewController (первый)
  • IngredientTableViewController (второй)
  • RecipeObject
  • RecipeData

RecipeObject Класс содержит два свойства. Одно свойство типа NSString с именем рецепта. Другое свойство имеет тип NSArray с ингредиентами. Объекты RecipeObject находятся в классе RecipeData.

RecipeObject *recipe1 = [[RecipeObject alloc]init]; 
recipe1.name = @"Fresh Coconut Cake"; 
recipe1.ingredients = [NSArray arrayWithObjects:@"Coconut cups", @"Milk", @"Baking powder", @"Butter", @"Sugar", @"Eggs", nil]; 

The RecipeData вызывается в RecipeTableViewController, чтобы отобразить имена рецептов в Tableview.

Сообщение от класса RecipeData к RecipeTableViewController:

- (void)viewDidLoad { 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 
self.recipes = [RecipeData allRecipes];} 

Отображаемые имена в Tableview:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    static NSString *cellIdentifier = @"recipeCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 

    RecipeObject *recipes = [self.recipes objectAtIndex:indexPath.row]; 
    cell.textLabel.text = recipes.name; 

    return cell; 
} 

Как добавить массив recipe1.ingredients в IngredientsTableViewController?

Любая помощь очень ценится!

+0

, который содержит много хорошей информации, но не того, что мне нужно. Мой вопрос: как мне получить массив recipe1.ingredients объекта RecipeObject в контроллере tableviewcontroller. – Nielsapp

ответ

0

Выполнение segue при выборе рецепта. При подготовке к segue-методу возьмите выбранный рецепт и передайте ингредиенты компоненту TableViewController. Нечто похожее на это:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self performSegueWithIdentifier:@"to_Ingredients" sender:self]; 
} 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"to_Ingredients"]) { 
     IngredientTableViewController *ingredientsTableViewController = (IngredientTableViewController *)[segue destinationController]; 

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row]; 
    ingredientsTableViewController.ingredients = recipe.ingredients; 

    } 

} 

Если вы не используете раскадровку, где вы установите этот SEGUE вам просто нужен первый метод который должен выглядеть следующим образом:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

IngredientTableViewController *ingredientsTableViewController = [[IngredientTableViewController alloc]init]; 
RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row]; 
ingredientsTableViewController.ingredients = recipe.ingredients; 
[self showDetailViewController:ingredientsTableViewController sender:self] 
} 
+0

Hey Finn FahrenKrug, большое спасибо за ваш ответ. Когда я внедряю ваш код, я получаю следующую ошибку: «Несовместимые типы указателей, назначающие« NSSrting »из« NSArray ». Эта ошибка возникает, когда я передаю recipe.ingredients в cell.textLabel.text компонента IngredientsTableViewController. Он принимает только значение NSString. Может быть, вы знаете, как преобразовать массив ингредиентов в приемлемое значение для cell.textLabel.text из IngredientsTableViewController. Парень, еще раз спасибо. Ты мой герой. – Nielsapp

+0

Нет проблем. Ошибка возникает, потому что вам нужно передать только один ингредиент в ячейку, а не все ингредиенты. Измените строку кода на следующую: cell.textLabel.text = [self.ingredients objectAtIndex: indexPath.row]; –

+0

Я изменил код в соответствии с вашими инструкциями, но он не сработал.Это потому, что я не декларировал ингредиенты (сам), а в классе RecipeObject. Затем данные ингредиентов передаются в свойство NSArray в IngredientsTableViewController. Может быть, мне нужно создать RecipeObject в cellForRowAtIndexPath, что-то вроде: RecipeObject * recipes = [..]? Я думаю, вы очень близко решаете проблему. Надеюсь, ты сможешь помочь мне с этим последним шагом. Вы очень цените! – Nielsapp

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