【问题标题】:How do I use IndexPathsForSelectedRows?如何使用 IndexPathsForSelectedRows?
【发布时间】:2016-09-02 20:21:05
【问题描述】:

我正在尝试使用自定义方法(由另一个用户创建)复制我创建的称为 [Ingredient] 的结构的实例。方法是这样的;

convenience init(copyingIngredientsFrom meal: Meal, atIndexPaths indexPaths: [IndexPath]) {
        let sections = meal.ingredientSections
        self.init(mealTitle: selectedMeal!.mealTitle, mealID: selectedMeal!.mealID, mealImage: selectedMeal!.mealImage, ingredients: indexPaths.map {sections[$0.section][$0.row]})

最初的饭菜是;

 init(mealTitle: String, mealID: Int, mealImage: UIImage?, ingredients: [Ingredient]) {
        self.mealTitle = mealTitle
        self.mealID = mealID
        self.mealImage = mealImage!
        self.ingredients = [Ingredient]()
    }

新餐点旨在创建一个新的 [餐点] 对象,该对象复制所选成分。我在 IndexPathsForSelectedRows 使应用程序崩溃时遇到了一些问题。理想情况下,我还希望默认情况下“选择”行,但这不是必需的。可以看出,此代码在 segue 之前执行。理想情况下,一旦代码修复,我想追加 newMeal,而不是 SelectedMeal。这段代码的问题是它当前使应用程序崩溃,并且 indexPaths.count 仅在选择 1 和 x 之间的任何值时才显示 1 并且仍然崩溃,但如果我不选择任何值,则在单击后什么也不打印按钮。如果我删除 if 语句,那么应用程序可以正常工作,没有问题。

if let list = detailTableViewIn.indexPathsForSelectedRows {
                print(indexPaths.count)
                let newMeal = Meal(copyingIngredientsFrom: selectedMeal!, atIndexPaths: list)
            }

        myMeals.insert(selectedMeal!, at: myMealsPosition)

        myMealsPosition += 1

        // Segues away
        self.performSegue(withIdentifier: "MealCreated", sender: self)

任何帮助将不胜感激。

【问题讨论】:

  • 我意识到这是我的 init 的问题。我会先尝试做一些研究。感谢您的帮助@Shades

标签: ios iphone swift xcode uitableview


【解决方案1】:

看这个例子:

  let Meals = [Meal]


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

        performSegueWithIdentifier("MealCreated", sender: indexPath)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
                let indexPath = self.tableView.indexPathForSelectedRow
                let meal = Meals[indexPath!.row]

                if segue.identifier == "MealCreated"{

                    let DetailMeal = (segue.destinationViewController as! DetailMealController)
                    DetailMeal.mealTitle = meal.mealTitle
                    DetailMeal.mealID = meal.mealID
                    DetailMeal.mealImage = meal.mealImage
                    DetailMeal.ingredients = meal.ingredients

                }
            }

【讨论】:

  • 谢谢@Carlo!不幸的是,这并不是我真正想要的,因为我正在尝试使用我的帖子中的方法 copyingIngredientsFrom() 。我尝试实现一个prepare for segue,应用仍然存在崩溃的问题。
  • 我的回答只能替代你的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多