2016-04-13 4 views
1

Для школы я делаю приложение о Холокосте. Мне нужно отобразить информацию о лагерях на detailViewController, но она не работает. Я могу получить доступ к значению «имя» переменной (извините, если моя терминология неверна), но ничего больше. Другие сообщения не относятся к Swift или не относятся к моей конкретной проблеме, поэтому я не могу найти решение.Значение типа 'AnyObject' не имеет значения ''

Вот код из класса, который создает тип переменной:

class DeathCamp: NSObject { 

var name:String = "" 
var locationCountry:String = "" 
var jewishDeathCount:Int = 0 
init(name:String, locationCountry:String, jewishDeathCount:Int){ 
    self.name = name 
    self.locationCountry = locationCountry 
    self.jewishDeathCount = jewishDeathCount 
} 



} 

Вот код, в котором элементы детали устанавливаются в массивы:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)  { 
    if segue.identifier == "showDetail" { 
     if let indexPath = self.tableView.indexPathForSelectedRow { 
      let deathCampNewObject = deathCampArray[indexPath.row] 
      let countryDeathNewObject = countryArray[indexPath.row] 
      let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
      controller.detailItemDeath = deathCampNewObject 
      controller.detailItemCountry = countryDeathNewObject 
      controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 
     } 
    } 
} 

В ответ на предложение из комментария, вот мой весь код для DetailViewController:

import UIKit 

class DetailViewController: UIViewController { 

    @IBOutlet weak var detailDescriptionLabel: UILabel! 

@IBOutlet var percentageJewsKilled: UILabel! 
@IBOutlet var jewsKilled: UILabel! 
let masterViewController = MasterViewController() 

var detailItemDeath: AnyObject? { 
    didSet { 
     // Update the view. 
     self.configureView() 
    } 
} 
var detailItemCountry: AnyObject? { 
    didSet { 
     // Update the view. 
     self.configureView() 

    } 
} 

func configureView() { 
    // Update the user interface for the detail item. 
    if let detail = self.detailItemDeath { 
     if let label = self.detailDescriptionLabel { 
      label.text = detailItemDeath?.name 
     } 
     if let label = self.jewsKilled { 
      label.text = "\(detailItemDeath?.jewishDeathCount)" 
     } 
    } 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.configureView() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 
+1

Без всего кода трудно понять, что называет. 'configureView' принадлежит классу? Что называется? Отправьте код для 'DetailViewController'. – ryantxr

ответ

1

Изменение

if let detail = self.detailItemDeath

к:

if let detail = self.detailItemDeath as? DeathCamp

Код выше попытку литой из detailItemDeath на объект типа DeathCamp.

изменить Также

detailItemDeath?.name

к:

detailItemDeath.name

Вы уже предприняли попытку разворачивать из detailItemDeath с синтаксисом if let, опциональный цепочки является излишним и, следовательно, ошибочными.

И, я не могу поверить, что пропустил это, переименуйте detailItemDeath в detailItemDeath.name в detail!

+0

Я только что изменил эту строку кода, но он все равно дает мне ту же ошибку. –

+0

@BenA .: Обновлен мой ответ. –

+0

Спасибо за быстрые ответы. Когда я делаю то, что вы предложили, я получаю «Значение необязательного типа« AnyObject »? не разворачивается, вы хотели использовать '!' или '?'?" –

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