2016-08-24 2 views
1

Я использую Swift, и я исправляю некоторые ошибки iOS 8. Я создал контроллер вида с .xib. Например, контроллер представления и вид таблицы в нем.iOS8 Swift не может создать контроллер представления с xib

Это как я создал мой .xib-файл.

1.I Перетащите Tableview в поле зрения, enter image description here 2.Set класс владельца файла, enter image description here 3.drag вид на владельца файла enter image description here 4.drag Tableview для владельца файла enter image description here И у меня есть этот код в владельце файла

class BicycleServiceInfoController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutLet tableView: UITableView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.delegate = self 
     tableView.dataSource = self 
    } 

    //other functions 
    ... 
} 

Но когда я запускаю это приложение в прошивкой 8.4 и попытаться представить этот вид контроллер, это приведет к краху. Xcode говорит, что «неожиданно нашел нуль при развертывании необязательного значения». Это потому, что tableView равен нулю в этом коде. Но он хорошо работает в iOS 9.

Кто-то может мне помочь?

+2

и как создать самое ViewController? – ogres

ответ

0

Задайте делегаты в функции viewWillAppear. Или в построителе интерфейса. В iOS 8 есть некоторые проблемы с созданием экранов позже, чем это необходимо.

2
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 
    let classString = String(describing: type(of: self)) 
    if Bundle.main.path(forResource: classString, ofType: "nib") == nil { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } else { 
     super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil) 
    } 
} 
required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

На iOS 8 вам нужно позвонить по этому методу, на iOS 9 или более поздней, система исправляет эту ошибку. Вы можете получить ответ here

+0

Это только я, или слишком много закрывающих брекетов? Или это плохое форматирование? – jww

+1

Правильный ответ. Устраняет проблему. Спасибо за это! – OutOfBounds

1

Tonin уже при условии правильного ответа, но и для всех, кто борется превращаю- Свифт 2.3, здесь вы идете:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
    let classString = String(MyClassName) 
    if NSBundle.mainBundle().pathForResource(classString, ofType: "nib") == nil{ 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } else { 
     super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil) 
    } 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
Смежные вопросы