Использование неразрешенного идентификатора 'indexPath' в Swift

65
7

Привет, я создаю переменную URL, и я получаю ошибку в этой строке.

Вот мой полный код.

"Использование неразрешенного идентификатора" indexPath "в Swift"

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

Я хочу, чтобы этот URL-адрес откроет другое видео для каждой именованной ячейки. arraysOfPrograms - это ячейки.

спросил(а) 2021-01-19T10:59:38+03:00 9 месяцев, 1 неделя назад
1
Решение
91

Чтобы расширить на 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.

Как сказал Муди, даже если "indexPath" был определен, NSIndexPath - это не тот тип, который вы хотели бы передать туда в любом случае, вы должны пройти в этой строке indexPath. Таким образом, это будет выглядеть так

    // this indexPath probably isn't want 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".

ответил(а) 2021-01-19T10:59:38+03:00 9 месяцев, 1 неделя назад
47

Переменная indexPath не определена должным образом. Кроме того, для доступа к элементу массива вам нужен индекс, а не индексный путь.

Обратите внимание, что вам нужно сделать две вещи, чтобы исправить это:

Правильно определить или получить ссылку на NSIndexPath в objectAtIndex используйте indexPath.row (или indexPath.item, если это представление коллекции). Но в Swift (и современной Objective-C) мы предпочли бы написать

arrayOfPrograms[indexPath.row]

ответил(а) 2021-01-19T10:59:38+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема