使用 SLPagingViewSwift 和故事板展开可选值时意外发现 nil
Unexpectedly found nil while unwrapping an optional value with SLPagingViewSwift and storyboards
我通过添加 1 个初始视图控制器(class 设置为 SLPagingViewSwift)和 3 个其他视图控制器(class 设置为 FirstViewController,将 SLPagingViewSwift 与故事板一起使用,故事板 ID 设置为个人资料;class 设置为 SecondViewController,故事板 ID 设置为主页;class 设置为 ThirdViewController,故事板 ID 设置为聊天)
我的AppDelegate.swift看起来像这样
import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var nav: UINavigationController?
var controller: SLPagingViewSwift?
var profileTableViewController: FirstViewController?
var homeViewController: SecondViewController?
var chatViewController: ThirdViewController?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
var orange = UIColor(red: 255/255, green: 69.0/255, blue: 0.0/255, alpha: 1.0)
var gray = UIColor(red: 0.84, green: 0.84, blue: 0.84, alpha: 1.0)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
profileTableViewController = storyboard.instantiateViewControllerWithIdentifier("profile") as? FirstViewController
homeViewController = storyboard.instantiateViewControllerWithIdentifier("home") as? SecondViewController
// homeViewController!.title = "Home"
// homeViewController!.view.backgroundColor = UIColor.yellowColor()
chatViewController = storyboard.instantiateViewControllerWithIdentifier("chat") as? ThirdViewController
// chatViewController!.title = "Chat"
// chatViewController!.view.backgroundColor = gray
var img1 = UIImage(named: "profile")
img1 = img1?.imageWithRenderingMode(.AlwaysTemplate)
var img2 = UIImage(named: "gear")
img2 = img2?.imageWithRenderingMode(.AlwaysTemplate)
var img3 = UIImage(named: "chat")
img3 = img3?.imageWithRenderingMode(.AlwaysTemplate)
var items = [UIImageView(image: img1), UIImageView(image: img2), UIImageView(image: img3)]
var controllers = [profileTableViewController!, homeViewController!, chatViewController!]
controller = SLPagingViewSwift(items: items, controllers: controllers, showPageControl: false)
controller?.pagingViewMoving = ({ subviews in
for v in subviews {
var lbl = v as! UIImageView
var c = gray
if(lbl.frame.origin.x > 45 && lbl.frame.origin.x < 145) {
c = self.gradient(Double(lbl.frame.origin.x), topX: Double(46), bottomX: Double(144), initC: orange, goal: gray)
}
else if (lbl.frame.origin.x > 145 && lbl.frame.origin.x < 245) {
c = self.gradient(Double(lbl.frame.origin.x), topX: Double(146), bottomX: Double(244), initC: gray, goal: orange)
}
else if(lbl.frame.origin.x == 145){
c = orange
}
lbl.tintColor = c
}
})
controller?.navigationSideItemsStyle = .SLNavigationSideItemsStyleNormal
controller?.setCurrentIndex(1, animated: false)
self.nav = UINavigationController(rootViewController: controller!)
self.window?.rootViewController = self.nav
self.window?.backgroundColor = UIColor.whiteColor()
self.window?.makeKeyAndVisible()
return true
}
...
}
然而,当我 运行 它时,我得到以下错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
在 SLPagingViewSwift.swift
的下一行
self.scrollView.setContentOffset(CGPointMake(xOffset, self.scrollView.contentOffset.y), animated: animated)
请帮助调试我做错了什么。 Swift
中似乎没有将 SLPagingViewSwift 与故事板集成的示例
看起来你调用这个方法 controller?.setCurrentIndex(1, animated: false)
太早了 self.scrollView 还没有初始化。
因此,为了延迟该方法调用子类 SLPagingViewSwift
覆盖方法 viewdidload
添加方法调用 controller?.setCurrentIndex(1, animated: false)
那里
我通过添加 1 个初始视图控制器(class 设置为 SLPagingViewSwift)和 3 个其他视图控制器(class 设置为 FirstViewController,将 SLPagingViewSwift 与故事板一起使用,故事板 ID 设置为个人资料;class 设置为 SecondViewController,故事板 ID 设置为主页;class 设置为 ThirdViewController,故事板 ID 设置为聊天)
我的AppDelegate.swift看起来像这样
import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var nav: UINavigationController?
var controller: SLPagingViewSwift?
var profileTableViewController: FirstViewController?
var homeViewController: SecondViewController?
var chatViewController: ThirdViewController?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
var orange = UIColor(red: 255/255, green: 69.0/255, blue: 0.0/255, alpha: 1.0)
var gray = UIColor(red: 0.84, green: 0.84, blue: 0.84, alpha: 1.0)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
profileTableViewController = storyboard.instantiateViewControllerWithIdentifier("profile") as? FirstViewController
homeViewController = storyboard.instantiateViewControllerWithIdentifier("home") as? SecondViewController
// homeViewController!.title = "Home"
// homeViewController!.view.backgroundColor = UIColor.yellowColor()
chatViewController = storyboard.instantiateViewControllerWithIdentifier("chat") as? ThirdViewController
// chatViewController!.title = "Chat"
// chatViewController!.view.backgroundColor = gray
var img1 = UIImage(named: "profile")
img1 = img1?.imageWithRenderingMode(.AlwaysTemplate)
var img2 = UIImage(named: "gear")
img2 = img2?.imageWithRenderingMode(.AlwaysTemplate)
var img3 = UIImage(named: "chat")
img3 = img3?.imageWithRenderingMode(.AlwaysTemplate)
var items = [UIImageView(image: img1), UIImageView(image: img2), UIImageView(image: img3)]
var controllers = [profileTableViewController!, homeViewController!, chatViewController!]
controller = SLPagingViewSwift(items: items, controllers: controllers, showPageControl: false)
controller?.pagingViewMoving = ({ subviews in
for v in subviews {
var lbl = v as! UIImageView
var c = gray
if(lbl.frame.origin.x > 45 && lbl.frame.origin.x < 145) {
c = self.gradient(Double(lbl.frame.origin.x), topX: Double(46), bottomX: Double(144), initC: orange, goal: gray)
}
else if (lbl.frame.origin.x > 145 && lbl.frame.origin.x < 245) {
c = self.gradient(Double(lbl.frame.origin.x), topX: Double(146), bottomX: Double(244), initC: gray, goal: orange)
}
else if(lbl.frame.origin.x == 145){
c = orange
}
lbl.tintColor = c
}
})
controller?.navigationSideItemsStyle = .SLNavigationSideItemsStyleNormal
controller?.setCurrentIndex(1, animated: false)
self.nav = UINavigationController(rootViewController: controller!)
self.window?.rootViewController = self.nav
self.window?.backgroundColor = UIColor.whiteColor()
self.window?.makeKeyAndVisible()
return true
}
...
}
然而,当我 运行 它时,我得到以下错误:
fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)
在 SLPagingViewSwift.swift
的下一行self.scrollView.setContentOffset(CGPointMake(xOffset, self.scrollView.contentOffset.y), animated: animated)
请帮助调试我做错了什么。 Swift
中似乎没有将 SLPagingViewSwift 与故事板集成的示例看起来你调用这个方法 controller?.setCurrentIndex(1, animated: false)
太早了 self.scrollView 还没有初始化。
因此,为了延迟该方法调用子类 SLPagingViewSwift
覆盖方法 viewdidload
添加方法调用 controller?.setCurrentIndex(1, animated: false)
那里