Изменение View Controller, когда didSelectRowAtIndexPath
В настоящее время я работаю над проектом по разработке приложения-службы обработки ошибок для iPhone. В моем приложении у меня есть табличное представление, и когда пользователь делится документом из Adobe Reader или где-то еще, и снова открывает приложение, ему предлагается дополнительное представление о том, как он хочет прикрепить файл. Они могут либо добавить файл к существующему элементу в табличном представлении, либо создать новый тикет. Если пользователь решает добавить вложение в существующий элемент, он должен выбрать эту опцию и затем щелкнуть ячейку в таблице, в которую он хотел бы добавить вложение. При щелчке по ячейке в текущий вид представлений должен быть добавлен другой контроллер представления. Причина, по которой я этого не представляю, заключается в том, что моя панель вкладок не будет отображаться в представленном представлении, поскольку она не является элементом панели вкладок. Однако, когда я щелкаю ячейку, чтобы прикрепить файл, я получаю фатальную ошибку: индекс выходит за пределы диапазона
func tableView(threadTableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let topic = thread[indexPath.row]
let selectedCell = threadTableView.cellForRowAtIndexPath(indexPath)
if(importFileMode) {
findChildrenOfParent(thread, childsIndex: indexPath.row)
let replyView = self.storyboard?.instantiateViewControllerWithIdentifier("replyView")
self.addChildViewController(replyView!)
self.view.addSubview(replyView!.view)
replyView!.didMoveToParentViewController(self)
}
else {
if(topic.canBeExpanded) {
if(topic.isExpanded) {
self.collapseCellsFromIndexOf(topic, indexPath: indexPath, threadTableView: threadTableView)
selectedCell?.accessoryView = self.viewForDisclosureForState(false)
}
else {
self.expandCellsFromIndexOf(topic, indexPath: indexPath, threadTableView: threadTableView)
selectedCell?.accessoryView = self.viewForDisclosureForState(true)
}
}
else {
// present the detailed view of entries
selectedEntryIndex = 0
findChildrenOfParent(thread, childsIndex: indexPath.row)
let entryDetailView = self.storyboard?.instantiateViewControllerWithIdentifier("EntryDetailScene")
self.addChildViewController(entryDetailView!)
self.view.addSubview(entryDetailView!.view)
entryDetailView!.didMoveToParentViewController(self)
}
}
}
Ошибка возникает именно при
replyView!.didMoveToParentViewController(self)
Любопытно, что код в последнем операторе else, отображающий entryDetailView, работает просто отлично.
Это мой ответ ViewController при загрузке и появился
override func viewDidLoad() {
super.viewDidLoad()
fileButtons = [attachmentButton1, attachmentButton2, attachmentButton3, attachmentButton4]
self.entryTopicLabel.text? = topicTitle
self.commentTextView.text? = entryList[selectedEntryIndex].etext!
replyTextView.layer.borderColor = textViewBorderColor.CGColor
replyTextView.layer.cornerRadius = 20
replyTextView.layer.borderWidth = 0.5
replyTextView.layer.masksToBounds = true
replyTextView.spellCheckingType = UITextSpellCheckingType.Yes
replyTextView.delegate = self
self.cancel = UIBarButtonItem(title: "Cancel ", style: .Plain, target: self, action: #selector(cancelReply))
self.cancel.tintColor = UIColor.whiteColor()
self.cancel.setTitleTextAttributes([
NSFontAttributeName: myFontNormal]
, forState: UIControlState.Normal)
self.navItems.rightBarButtonItem = self.cancel
self.navigationBar.items = [navItems]
attachmentButton1.hidden = true
attachmentButton2.hidden = true
attachmentButton3.hidden = true
attachmentButton4.hidden = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidDisappear(animated: Bool) {
filesToUpload.removeAll()
}
override func viewWillAppear(animated: Bool) {
if(haveImportedFile) {
attachImport()
}
}
func attachImport() {
let defaults = NSUserDefaults(suiteName: userDefaultsGroup)
let file = defaults?.objectForKey("file")
if(filesToUpload.count < 5) {
filesToUpload.append(file!)
}
else {
singleActionAlert(self, title: "Too Many Attachments", message: "You are only allowed a maximum of four file attachments.", action: "OK")
}
defaults?.setObject(nil, forKey: "file")
}
Я застрял на этой проблеме в течение нескольких часов, поэтому любая помощь будет оценена!:) кстати, используя xcode 7.3 и swift 2.2
2 ответа
Вы забыли назвать суперклассы: super.viewWillAppear(анимированный) super.viewDidDisappear r(анимированный)
Я нашел проблему, я не обновлял индекс, используемый для моего массива тем в представлении ответа