Я работаю над проектом со Swift и Storyboards. Это проект преобразования традиционного проекта IB и Objective-C. У меня возникла проблема с созданием экземпляра UITableView при загрузке представления. Позволь мне объяснить.
Проект является навигационным проектом. Вот обзор раскадровки.
Первым viewController раскадровки является HomeViewController и представляет собой целевую страницу, которая отображает общую информацию. Следующий виртуальный канал называется FeedViewController и показывает несколько RSS-каналов. Вы можете увидеть расширенный снимок экрана NavigationController, HomeViewController и FeedViewController на рисунке ниже.
Моя проблема в том, что я не могу заставить tableView создавать экземпляры. Сначала я проверил, чтобы убедиться, что мой tableView подключен как выход и что свойства dataSource и делегата подключены. Вы можете увидеть это на картинке ниже.
В моем классе FeedViewController есть свойство Outler с именем feedsTableView. Вы можете увидеть объявление в коде ниже.
class FeedViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, FLODataHandlerDelegate
{
// View Contoller and Protocol Properties
var floView : FLOViewController?
var dataHandler : FLODataHandler?
// Interface and Content Properties
var refreshControl : UIRefreshControl?
// IBOutlets
@IBOutlet weak var feedsTableView: UITableView!
@IBOutlet weak var backgroundImage: UIImageView!
В HomeViewController у меня есть свойство FeedViewController, которое я намерен использовать для получения доступа к FeedViewController feedsTableView.
class HomeViewController: UIViewController, FLODataHandlerDelegate, MFMailComposeViewControllerDelegate
{
// View Contoller and Protocol Properties
var feedViewController : FeedViewController?
var dataHandler : FLODataHandler?
Когда вызывается метод viewDidLoad() HomeViewController, я запускаю dataHandler, который создает экземпляр FeedViewController, и устанавливаю его в мое свойство FeedViewController.
override func viewDidLoad()
{
super.viewDidLoad()
// Set up the gesture recognizer to allow for swiping to the feed VC.
let recognizer = UISwipeGestureRecognizer(target: self, action: Selector("goToNext"))
recognizer.direction = UISwipeGestureRecognizerDirection.Left
self.view.addGestureRecognizer(recognizer)
// Start the data handler
self.setUpDataHandler()
}
setUpDataHandler()
func setUpDataHandler()
{
// Intitalize FeedVC for use later in the VC
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("FeedViewController") as! FeedViewController
self.feedViewController = vc
}
У меня также есть отказоустойчивость: если кто-то перейдет к FeedViewController до вызова метода setUpDataHandler(), я также создам экземпляр FeedViewController здесь.
func goToNext()
{
// Grab the feedViewController so it can be pushed onto the stack. Make sure you set up the storyboard identifier.
let feedVC = self.storyboard!.instantiateViewControllerWithIdentifier("FeedViewController") as! FeedViewController
self.feedViewController = feedVC
self.navigationController!.pushViewController(self.feedViewController!, animated: true)
}
Однако экземпляр feedsTableView не создается. В методе viewDidLoad() FeedViewController я пытаюсь добавить feedsTableView в UIRefreshController.
override func viewDidLoad()
{
super.viewDidLoad()
self.refreshControl = UIRefreshControl()
self.refreshControl!.addTarget(self, action: "refreshInvoked:state:", forControlEvents: UIControlEvents.ValueChanged)
// See the note in viewDidLoad in FLOViewController.
self.feedsTableView.addSubview(self.refreshControl!)
}
Когда приложение запускается, я получаю следующую ошибку.
фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения
На изображении ниже показано, как это называется. Это viewDidLoad() FeedViewController. Как вы можете видеть на картинке, я даже пытался создать экземпляр feedsTableView перед добавлением его в UIRefreshController, и я все еще получаю сообщение об ошибке.
Любая помощь будет принята с благодарностью.
Заботиться,
Джон