【问题标题】:Use of unresolved identifier 'indexPath' in Swift在 Swift 中使用未解析的标识符“indexPath”
【发布时间】:2014-11-12 15:32:17
【问题描述】:

您好,我正在创建变量 URL,但在这一行中出现错误。

这是我的完整代码。

“在 Swift 中使用未解析的标识符 'indexPath'”

import UIKit
import MediaPlayer

class DetailViewController: UIViewController{

    var moviePlayer:MPMoviePlayerController!
    var color = UIColor.whiteColor()
    var name = NSString()
    var arrayOfPrograms: NSArray = []

    var url = NSString()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.navigationController?.navigationBar.titleTextAttributes =
            [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 20)!,
                NSForegroundColorAttributeName: UIColor.whiteColor()]
        self.navigationController?.navigationBar.tintColor = color
        self.navigationItem.title = "TV JOJ"

        var url = NSURL(string: (self.arrayOfPrograms.objectAtIndex(indexPath).Program).url)
        moviePlayer = MPMoviePlayerController(contentURL: url)

        moviePlayer.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)
        moviePlayer.view.sizeToFit()
        self.view.addSubview(moviePlayer.view)
        moviePlayer.fullscreen = true
        moviePlayer.controlStyle = MPMovieControlStyle.Embedded
    }

    override func supportedInterfaceOrientations() -> Int {
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    }

}

对不起,我是初学者..

细胞

var arrayOfPrograms: NSArray = []
arrayOfPrograms = [Program(name: "Markíza", url: "http://1.com")]

这就是我尝试通过 segue 传递数据的方式

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        var indexPath: NSIndexPath = self.tableView?.indexPathForSelectedRow() as NSIndexPath!
        var destinationViewController: DetailViewController
        (segue.destinationViewController as DetailViewController).url = (self.arrayOfPrograms.objectAtIndex(indexPath.row) as Program).url  

我希望该网址将为每个命名单元格打开不同的视频。 arraysOfPrograms 是单元格。

【问题讨论】:

  • 您必须提供更多范围上下文。尝试发布您发布的一行包含的函数的完整定义。
  • 我们无法读懂你的想法。向我们展示更多代码。
  • 您希望indexPath 出现什么?目前该变量未在任何地方定义,这是您的错误。

标签: ios xcode swift


【解决方案1】:

扩展 Mundi 的答案 - 这些行 -

    var url = NSURL(string:(self.arrayOfPrograms.objectAtIndex(indexPath).Program).url)
    moviePlayer = MPMoviePlayerController(contentURL: url)

可以这样写,比较清楚一点-

    var url = self.arrayOfPrograms.objectAtIndex(indexPath).Program.url;
    moviePlayer = MPMoviePlayerController(contentURL: url);

主要问题是变量“indexPath”在程序中的任何位置都不存在,因此您没有告诉程序从 arrayOfPrograms 数组中取出哪个索引。

就像 Mudi 说的那样,即使定义了“indexPath”,NSIndexPath 也不是您想要传递的类型,您还是想要传递该 indexPath 的行。所以它看起来像这样

    // this indexPath probably isn't what you want. Its just an example to illustrate my point.
    var indexPath = NSIndexPath(forRow: 1, inSection: 0)

    // getting the row (1) from the variable indexPath
    var url = self.arrayOfPrograms.objectAtIndex(indexPath.row).Program.url
    moviePlayer = MPMoviePlayerController(contentURL: url)

你到底想做什么?你想遍历 arrayOfPrograms 并为该数组中的每个项目创建一个电影播放器​​吗?或者这应该在表格视图中并且当用户单击特定行时。回答这些特定问题将帮助您确定“indexPath”的来源。

【讨论】:

  • 我希望该网址将为每个命名单元格打开不同的视频。 arraysOfPrograms 是单元格。检查我的编辑。
【解决方案2】:

变量indexPath 未正确定义。此外,要访问数组的成员,您需要一个索引,而不是索引路径。

请注意,您必须做两件事来修复此问题:

  1. 正确定义或获取对NSIndexPath 的引用
  2. objectAtIndex 中使用indexPath.row(或indexPath.item,如果是集合视图)。但在 Swift(和现代 Objective-C)中,我们更愿意写

 

arrayOfPrograms[indexPath.row]

【讨论】:

  • 不,你没有。根据您的代码,您没有定义 indexPath
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
相关资源
最近更新 更多