2014-10-31 7 views
1

Я работаю над Swift, у меня есть ошибка в методе didSelectRowAtIndexPath tableview. Я хочу передать значение другому контроллеру представления i.e 'secondViewController'. Здесь EmployeesId - это массив. Соответствующий код выглядит следующим образом:Передача значений с одного контроллера представления в другой в Swift

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var view: Dashboard = self.storyboard?.instantiateViewControllerWithIdentifier("Dashboard") as Dashboard 

    self.navigationController?.pushViewController(view, animated: true) 
    secondViewController.UserId = employeesId[indexPath.item] //getting an error here. 
} 

Но я получаю эту ошибку: фатальной ошибки: неожиданно обнаружил ноль, а разворачивание необязательного значения.

Любая помощь будет оценена по достоинству.

+0

какой тип UserId? Если это UILabel, тогда он будет равен нулю, пока визуализация не будет отображаться. Кроме того, где установлен secondViewController? –

+0

Это должен быть indexPath.row, а не indexPath.item, но я не знаю, исправит ли это вашу проблему. Вы уверены, что сотрудники [indexPath.item] не ноль? – rdelmar

+0

UserId (сильный, неатомный) в seconfViewController? – casillas

ответ

4

Вот общее решение с двумя предположениями. Во-первых, UserId не является UILabel. Во-вторых, вы имели в виду использовать view который инстанцированный во второй строке, вместо того, чтобы использовать secondViewController

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var view: Dashboard = self.storyboard?.instantiateViewControllerWithIdentifier("Dashboard") as Dashboard 

    self.navigationController?.pushViewController(view, animated: true) 
    view.UserId = employeesId[indexPath.row] 
} 

Вот что выглядит Dashboard как:

class Dashboard: UIViewController { 
    var UserId: String! 
    @IBOutlet var userIDLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     userIDLabel.text = UserId 
    } 

    ... 
} 
+0

, если я хочу вызвать веб-службу, используя «userid» в viewDidLoad(), как я буду вызывать, потому что идентификатор пользователя возвращает nil –

0

UserId(strong, nonatomic) в secondViewController?

Если он слабый, он отправляет мусор на лету. Вы должны сделать это сильным.

1

Мы можем передать значение, используя «-структуру» в скор 3

  1. Создать быстрый файл в проекте
  2. Создать класс в скор файл, созданный как пыльник

    class StructOperation { 
         struct glovalVariable { 
         static var userName = String(); 
        } 
    } 
    
  3. Ассинг значение «Статическая переменная имя_пользователя» переменная «структура glovalVariable» в «StructOperation» класса от первого View Controller как

    @IBAction func btnSend(_ sender: Any) { 
        StructOperation.glovalVariable.userName = "Enamul Haque"; 
        //Code Move to Sencon View Controller 
    } 
    
  4. В контроллере представления назначения получить значение как сильфона

    var username = StructOperation.glovalVariable.userName; 
    
+0

, это лучший способ или передать глобальное значение в качестве другого контроллера? @Enamul Haque –

+0

спасибо @Dhaval Bhadania –

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