2015-03-09 5 views
0

ОК, я прошел через все потоки, которые, предположительно, справляются с этой проблемой, и никто из них, похоже, не исправил мою проблему.Swift ViewController не имеет имени с именем

В принципе, у меня есть настройка таблицы с данными ядра, и когда я перехожу в следующий контроллер представления, я хочу передать некоторые данные. Как вы знаете, передаваемые данные уже должны быть объявлены в контроллере представления назначения, каким он есть. Но я все время получаю сообщение о том, что ViewController не имеет имени члена nItem (переменная, которую я передаю).

Вот фрагмент кода, который имеет дело с передачей данных от контроллера табличного:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 

    if segue.identifier == "editCurrentMed" { 
     let cell = sender as UITableViewCell 
     let indexPath = tableView.indexPathForCell(cell) 
     let addEditMedVC : ViewController = segue.destinationViewController as ViewController 
     let nItem : Meds = frc.objectAtIndexPath(indexPath!) as Meds 
     addEditMedVC.nItem = nItem 
    } 

} 

А вот верхняя часть моей точки зрения контроллера, который объявляя переменную вместе с видом сделал нагрузки потому что он обращается к нему, когда данные редактируются.

import UIKit 
import CoreData 

class addEditMedVC: UIViewController { 

    var nItem : Meds? = nil 

    @IBOutlet weak var medName: UITextField! 
    @IBOutlet weak var dosage: UITextField! 
    @IBOutlet weak var timeToTake: UISegmentedControl! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if nItem != nil { 
     medName.text = nItem!.name 
     dosage.text = nItem!.dose 
     nItem!.time = "Morning" 
     } 

     // Do any additional setup after loading the view. 
} 

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

+0

пусть addEditMedVC: ViewController = segue.destinationViewController в ViewController. Не следует «ViewController» быть «addEditMedVC». – aToz

+0

Я не уверен, что вы имеете в виду aToz –

+0

это (addEditMedVC.nItem = nItem) строка, которая дает вам ошибку? – aToz

ответ

1

Присвоение необязательного значения необязательному свойству должно работать должным образом. Но вы, кажется, путаете имена ваших классов.

С вашего prepareForSegue очевидно, что класс контроллера вида назначения - ViewController. Однако в вашем файле класса вы пишете это подкласс UIViewController, называемый addEditMedVC (который больше похож на имя переменной, а не на имя обычно капитализированного класса).

-> Переименуйте свой класс на ViewController.

+0

Прошу прощения, каково ваше рекомендуемое решение? По общему признанию, я должен был загладить имя класса, но это не имеет никакого эффекта здесь, я не думаю. Когда вы создаете класс Cocoa Touch, он дает только опцию выбора UIViewController, а не ViewController. Тем не менее, изменение этого в файле класса также не имеет никакого полезного эффекта. –

+0

Извините, я думал, что это очевидно. Назовите его 'ViewController', поэтому он соответствует тому, который вы указываете в вашем методе' prepareForSegue'. – Mundi

+0

Привет Mundi. Это не повлияло. Могу ли я назвать это foo и все еще работать. Мне кажется, что это просто временная константа. То, что меня убивает, - это тот же код, который успешно используется в двух других приложениях, и я не вижу никакой разницы между ними. –

0

Изменение следующий код:

let addEditMedVC : ViewController = segue.destinationViewController as ViewController 
    let nItem : Meds = frc.objectAtIndexPath(indexPath!) as Meds 
    addEditMedVC.nItem = nItem 

к этому коду работы:

let vc : addEditMedVC = segue.destinationViewController as addEditMedVC 
    let nItem : Meds = frc.objectAtIndexPath(indexPath!) as Meds 
    vc.nItem = nItem 
+0

Это именно то решение, которое я предложил. Названия классов в нижнем регистре обескуражены и запутывают - это вас смутило! – Mundi

+0

Я только что опубликовал код, который работал. Я выбрал ваш ответ. –