Class' ViewController'没有初始化程序错误:xcode Beta 4

时间:2014-07-22 23:50:52

标签: ios xcode swift

我之前在所有其他测试版上运行的文件上收到此错误,由于某些原因,在beta 4 xcode中它显示此错误,它是整个项目中唯一的文件,它执行此操作而且我不确定为什么它只为beta 4做任何想法?我已尝试使用默认的init但我收到编译错误。

我认为放入的代码太多了,所以直接使用文件。

https://www.dropbox.com/s/7a6q1oyj2qnshu0/SearchView.swift

import UIKit
import CloudKit
import Foundation
import QuartzCore
import MediaPlayer
import AVFoundation
import CoreMedia

class SearchViewController: UIViewController, UITableViewDelegate,UITableViewDataSource, UISearchBarDelegate, UIScrollViewDelegate, SearchAPIProtocol {



enum UIUserInterfaceIdiom : Int {
    case Unspecified

    case Phone // iPhone and iPod touch style UI
    case Pad // iPad style UI
}


var searchCell: SearchViewCell = SearchViewCell()
var progressView: CGCircleProgressView = CGCircleProgressView()
var tableData = NSArray()
var buttonIndex: NSIndexPath?
var previousIndex: NSIndexPath?
var songPlayer = AVPlayer()
var hidden = Bool()
var startContentOffset = CGFloat()
var lastContentOffset = CGFloat()
var firstAmount = Int()
var imageCache = NSMutableDictionary()
var searchOpen: Bool?
var searchAPI: SearchAPIController = SearchAPIController()
@IBOutlet var tableView: UITableView!
@IBOutlet var searchBar: UISearchBar!

@IBOutlet var sBar: UIView!

override func viewDidLoad() {
        super.viewDidLoad()

    var nib = UINib(nibName: "SearchViewCell", bundle: nil)

    tableView.registerNib(nib, forCellReuseIdentifier: "Cell")
     searchAPI.delegate = self
    searchAPI.searchItunesFor("Justin")
   // container = CKContainer.defaultContainer()
    //publicDatabase = container?.privateCloudDatabase
    self.setUpSearchBar()
   hidden = false
    self.tableView.contentInset = UIEdgeInsetsMake(108, 0, 0, 0)
    var subViews: UIView = searchBar.subviews.bridgeToObjectiveC().lastObject as UIView
    var textView: UITextField = subViews.subviews.bridgeToObjectiveC().objectAtIndex(1) as UITextField
    textView.textColor = UIColor.whiteColor()
    // Do any additional setup after loading the view, typically from a nib.

}





func setUpSearchBar() {

        var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Dark)) as UIVisualEffectView

        visualEffectView.frame = sBar.bounds

        sBar.addSubview(visualEffectView)
        sBar.sendSubviewToBack(visualEffectView)

        sBar.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.CenterX,
            relatedBy:.Equal, toItem:sBar,
            attribute:.CenterX, multiplier:1, constant:0))
        sBar.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.CenterY,
            relatedBy:.Equal, toItem:sBar,
            attribute:.CenterY, multiplier:1, constant:0))

        sBar.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Width,
            relatedBy:.Equal, toItem:sBar,
            attribute:.Width, multiplier:1, constant:0))

        sBar.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Height,
            relatedBy:.Equal, toItem:sBar,
            attribute:.Height, multiplier:1, constant:0))

        sBar.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Leading,
            relatedBy:.Equal, toItem:sBar,
            attribute:.Leading, multiplier:1, constant:0))

        sBar.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Trailing,
            relatedBy:.Equal, toItem:sBar,
            attribute:.Trailing, multiplier:1, constant:0))


        visualEffectView.setTranslatesAutoresizingMaskIntoConstraints(false)
    }


 override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

并显示tableview:

func tableView(tableView: UITableView!, heightForHeaderInSection section: Int) -> Int {
    return 1
}
func tableView(tableView: UITableView!, viewForFooterInSection section: Int) -> UIView {
    var view = UIView(frame: CGRect.zeroRect)
    return view
}
func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
    return 81
}

func tableView(tableView: UITableView!, heightForFootInSection section: Int) -> Int {
        return 1
}

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {

    if self.tableData.count > firstAmount {
        return firstAmount + 1
    } else {
        return 0
    }
        //return self.tableData!.count


}

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!  {
    let CellIndentifier: NSString = "Cell"
    let moreID: String = "moreCell"

    var searchCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as SearchViewCell


    var rowData: NSDictionary = self.tableData[indexPath!.row] as NSDictionary
    var rows = indexPath.row

    if rows == firstAmount {

        searchCell.loadMoreView.hidden = false

    } else {
    searchCell.selectionStyle = UITableViewCellSelectionStyle.None
    searchCell.clipsToBounds = true

        searchCell.loadMoreView.hidden = true

    var artistName = rowData["artistName"] as String
    var trackName = rowData["trackName"] as String
    var previewURL = rowData["previewUrl"] as String
    //var artistURL = rowData["artistViewUrl"] as String
    //var buyURL = rowData["trackViewUrl"] as String
    var artworkURL = rowData["artworkUrl100"] as String


    searchCell.previewButton.addTarget(self, action: "flipButton:", forControlEvents: UIControlEvents.TouchUpInside)


    searchCell.songName.text = trackName
    searchCell.artistName.text = artistName

    var layer: CALayer = searchCell.blurView.layer
    layer.shadowOffset = CGSizeMake(0, 0)
    layer.shadowColor = UIColor(white: 0.0, alpha: 1.0).CGColor
    layer.shadowRadius = 1.0
    layer.shadowOpacity = 0.5

    searchCell.backImage.clipsToBounds = true
    var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Dark)) as UIVisualEffectView


    visualEffectView.frame = searchCell.blurView.bounds

    searchCell.blurView.addSubview(visualEffectView)
    searchCell.blurView.sendSubviewToBack(visualEffectView)


       // NSLayoutConstraint.deactivateConstraints(searchCell.blurView.constraints())
        searchCell.blurView.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.CenterX,
            relatedBy:.Equal, toItem:searchCell.blurView,
            attribute:.CenterX, multiplier:1, constant:0))
        searchCell.blurView.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.CenterY,
            relatedBy:.Equal, toItem:searchCell.blurView,
            attribute:.CenterY, multiplier:1, constant:0))

        searchCell.blurView.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Width,
            relatedBy:.Equal, toItem:searchCell.blurView,
            attribute:.Width, multiplier:1, constant:0))

        searchCell.blurView.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Height,
            relatedBy:.Equal, toItem:searchCell.blurView,
            attribute:.Height, multiplier:1, constant:0))

        searchCell.blurView.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Leading,
            relatedBy:.Equal, toItem:searchCell.blurView,
            attribute:.Leading, multiplier:1, constant:0))

        searchCell.blurView.addConstraint(NSLayoutConstraint(
            item:visualEffectView, attribute:.Trailing,
            relatedBy:.Equal, toItem:searchCell.blurView,
            attribute:.Trailing, multiplier:1, constant:0))


        visualEffectView.setTranslatesAutoresizingMaskIntoConstraints(false)




    var placeHolder = UIImage(named: "placeHolder.png")
    searchCell.artworkIMG.image = placeHolder
    searchCell.backImage.image = placeHolder

        dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

            var urlString: NSString = rowData["artworkUrl100"] as NSString

            var image: UIImage? = self.imageCache.valueForKey(urlString) as? UIImage

            if( !image? ) {
                var imgURL: NSURL = NSURL(string: urlString)

                var request: NSURLRequest = NSURLRequest(URL: imgURL)
                var urlConnection: NSURLConnection = NSURLConnection(request: request, delegate: self)

                NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
                    if !error? {
                        image = UIImage(data: data)
                        self.imageCache.setValue(image, forKey: urlString)
                        searchCell.artworkIMG.image = image
                        searchCell.backImage.image = image
                    } else {
                        println("Error: \(error.localizedDescription)")
                    }
                    })

            } else {

                searchCell.artworkIMG.image = image
                searchCell.backImage.image = image
            }
            })

    }
    return searchCell
}
func tableView(tableView: UITableView!, willDisplayCell cell: UITableViewCell!, forRowAtIndexPath indexPath: NSIndexPath!) {
    cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1)
    /*UIView.animateWithDuration(0.25, animations: {
        cell.layer.transform = CATransform3DMakeScale(1,1,1)
        })*/
    UIView.animateWithDuration(0.4, animations: {
        cell.layer.transform = CATransform3DMakeScale(1.1,1.1,1.1)
        }, completion: {(value: Bool) in
        cell.layer.transform = CATransform3DMakeScale(1,1,1)
        })
}

6 个答案:

答案 0 :(得分:10)

来自SwiftSoda.com:

许多Swift程序员在使用ViewControllers和Xcode beta 4时遇到了一些麻烦。错误是viewController不能用()构建。

但是如果你看一下View Controller,你会看到另一个错误,Class viewController没有初始化器。接下来(替换为您使用的任何插座)NSTextField具有非可选类型'NSTextField'。

设置IBOutlets?结束纠正了问题。之后,每次将Outlet的变量用于!。

时,您将需要更改一些语法

这是一个简短的例子:

//ViewController Class File:
// view controller swift file for OS X
import AppKit

// you can use () for AnyObject as long as you do some things first.
var mvc = vc()

class vc: NSViewController {
// the key here is "?" after NSTextField to declare an optional
@IBOutlet var myStatusField: NSTextField?
}

//AppDelegate File:
import AppKit

//here we load the view inside the AppDelegate
class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet var window: NSWindow!

func applicationDidFinishLaunching(aNotification: NSNotification?) {
// Insert code here to initialize your application

//load and center view in main window
window.contentView.addSubview(mvc.view)
mvc.view.frame = window.contentView.bounds

//here we display some text in myStatusField with *!.stringValue
// ! is used to unwrap the optional.
mvc.myStatusField!.stringValue = "Swift Soda wishes you a good day!"
}
}

答案 1 :(得分:6)

由于我的某个属性未初始化,因此出现相同的错误。希望它能帮助一些人

答案 2 :(得分:3)

我认为最简单的方法就是覆盖没有override关键字的init函数,只需调用super.init,它就可以了 像这样

@IBOutlet weak var tableView: UITableView!

init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

}

答案 3 :(得分:0)

您可能希望使用if IBOutletName语句安全地解包任何选项,如下所示:

if mvc.myStatusField {
mvc.myStatusField!.stringValue = "Swift Soda wishes you a good day!"
}

这样你的应用就不会崩溃。

我试图让IBOutlets不使用而工作?而且! (可选项),但到目前为止它似乎是唯一适用于beta4和NSViewController的东西。

答案 4 :(得分:0)

在视图控制器中实现以下内容:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

答案 5 :(得分:0)

出现此错误是因为我声明了常量可选,您可以在下面看到代码:

let subCategory: String?

我将格式let更改为var,并为我解决了问题。 使用Xcode 10,Swift 4.2