Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Class 'ViewController' has no initializers error: xcode Beta 4

Tags:

xcode

ios

swift

I'm receiving this error on a file which works previously on all other beta's, for some reason in the beta 4 xcode it displays this error, its the only file in the entire project which does it and i'm not sure why its doing it just for beta 4, any ideas? i've tried using the default init on it but i get a compile error.

i think theres too much code to place in, so instead heres the file direct.

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.
}

and displaying 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)
        })
}
like image 645
bevbomb Avatar asked Jul 22 '14 23:07

bevbomb


3 Answers

From SwiftSoda.com:

Many Swift Programmers are having a little trouble with ViewControllers and Xcode beta 4. The error is viewController is not constructible with ().

But if you look at your View Controller, you will see another error, Class viewController has no initializers. Followed by (replace with whichever outlets you are using) NSTextField has non-optional type ‘NSTextField’.

Setting the IBOutlets with ? the end corrects the problem. After that you will need to change some syntax each time the Outlet’s variable is used with !.

Here is a brief example:

//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!"
}
}
like image 106
Swift Soda Avatar answered Nov 09 '22 11:11

Swift Soda


Had the same error because one of my properties was not initialized. Hope it helps some peoples

like image 21
Beninho85 Avatar answered Nov 09 '22 10:11

Beninho85


I believe the easiest way is just override an init function without override keyword and just call super.init, and it works like this

@IBOutlet weak var tableView: UITableView!

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

}
like image 23
xmkevinchen Avatar answered Nov 09 '22 11:11

xmkevinchen