У меня есть приложение, которое нуждается в исправлении, описанном ниже.Процесс идет следующим образом, пользователь запускает приложение, новостные статьи отображаются на uitableview
каждая ячейка имеет одну статью детали.Когда пользователь нажимает на любую ячейку, мы устанавливаем все статьи на uipageviewcontroller
, используя pageViewController.setViewControllers([newsDetails!], direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil)
Если статьи отображаются только в текстовом представлении, перемещение контроллера влево и вправо работает отлично.Но если есть две последовательные статьи веб-просмотра, проведите пальцем вправо (от статьи веб-просмотра перейти к следующей статье веб-просмотра), а затем влево (назад к статье веб-просмотра) приложение вылетает с этим журналом сбоев .
Просто чтобы поэкспериментировать, я поместил свои данные в textview вместо uiwebview, и он все еще падал с тем же журналом сбоев, в этой статье используется тег iframe.Код здесь:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
//----------------------------------------------------------------------
// Returning the article's detail view controller for the previous index
print("VIEW CONTROLLER AFTER")
return articleDetailViewController(for: detailPageIndex()-1,fromDetail:false)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
//------------------------------------------------------------------
// Returning the article's detail view controller for the next index
print("VIEW CONTROLLER BEFORE")
return articleDetailViewController(for: detailPageIndex()+1,fromDetail:false)
}
// We create a new instance of detail View Controller when ever a new VC is requested
func articleDetailViewController(for index: Int,fromDetail :Bool) -> MISNewsDetailViewController? {
let allNews:Bool
if(UserDefaults.standard.object(forKey: "IsAllNewsSelected") == nil || (UserDefaults.standard.object(forKey: "IsAllNewsSelected") as! String) == "YES"){
allNews = true
}else{
allNews = false
}
//--------------------------------------------
// If the index is out of bound, nil is return
if(allNews){
if (index == -1 || index >= (allArticles.count)) {
return nil
}
}else{
if (index == -1 || index >= (myArticles.count)) {
return nil
}
}
//---------------------------------------------------
// Getting the article object for the requested index
let article: MISArticle?
let detailViewController = storyboard?.instantiateViewController(withIdentifier: "MISNewsDetailViewController") as? MISNewsDetailViewController
let myAppDelegate = (UIApplication.shared.delegate as! AppDelegate)
if(myAppDelegate.isLaunchedFromWidget){
article = self.getTheWidgetSelectedArticleBaasedOnGlobalId();
}else{
if(allNews){
article = allArticles[index]
detailViewController?.isAllNewsPost = true
}else{
article = myArticles[index]
detailViewController?.isAllNewsPost = false
}
}
detailViewController?.mPost = article
detailViewController?.isRefreshPost = fromDetail
return detailViewController
}