Skip to main content
 首页 » 操作系统

ios之'UIWindow ' does not have a member named ' rootViewController'

2024年01月01日42shanyou

我下载了Apple's Table Search with UISearchController (Obj-C and Swift)示例代码。

我使用的是 Xcode 6.3 测试版。打开 Swift 文件后,我将代码转换为 Swift 1.2(通过编辑/转换)。转换后,我在 AppDelegate.swift 中收到以下编译器错误(我还注意到下面原始代码中出现错误的行。:

 Objective-C method 'application:didFinishLaunchingWithOptions:' provided by method 'application(_:didFinishLaunchingWithOptions:)' conflicts with optional requirement method 'application(_:didFinishLaunchingWithOptions:)' in protocol 'UIApplicationDelegate' 
 
'UIWindow?' does not have a member named 'rootViewController'` 

有什么东西跳出来了吗?这是 AppDelegate.swift

import UIKit 
 
@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    // MARK: Properties 
 
    var window: UIWindow? 
 
    // MARK: Application Life Cycle 
 
    // error on the line below 
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 
 
        let products = [ 
            Product(type: Product.deviceTypeTitle, name: "iPhone", year: 2007, price: 599.00), 
            Product(type: Product.deviceTypeTitle, name: "iPod", year: 2001, price: 399.00), 
            Product(type: Product.deviceTypeTitle, name: "iPod touch", year: 2007, price: 210.00), 
            Product(type: Product.deviceTypeTitle, name: "iPad", year: 2010, price: 499.00), 
            Product(type: Product.deviceTypeTitle, name: "iPad mini", year: 2012, price: 659.00), 
            Product(type: Product.desktopTypeTitle, name: "iMac", year: 1997, price: 1299.00), 
            Product(type: Product.desktopTypeTitle, name: "Mac Pro", year: 2006, price: 2499.00), 
            Product(type: Product.portableTypeTitle, name: "MacBook Air", year: 2008, price: 1799.00), 
            Product(type: Product.portableTypeTitle, name: "MacBook Pro", year: 2006, price: 1499.00) 
        ] 
 
        // error on the line below 
        let navController = window.rootViewController as! UINavigationController 
 
        // Note we want the first view controller (not the visibleViewController) in case 
        // we are being store from UIStateRestoration. 
        let tableViewController = navController.viewControllers[0] as! MainTableViewController 
        tableViewController.products = products 
 
        return true 
    } 
 
    // MARK: UIStateRestoration 
 
    func application(application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool { 
        return true 
    } 
 
    func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool { 
        return true 
    } 
} 

请您参考如下方法:

试试这个,你必须在访问它之前进行初始化:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 
 
    // declaration of products like in your above code 
    .... 
 
    window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    let navController = window!.rootViewController as! UINavigationController            
 
    let tableViewController = navController.viewControllers[0] as! MainTableViewController 
    tableViewController.products = products 
 
    return true 
} 

希望对你有帮助