Class "ViewController" does not have an initializer error: xcode Beta 4

I get this error in a file that works earlier on all other beta versions, for some reason in the 4-beta beta it displays this error, its the only file in the whole project that does this, and I'm not sure why is he only doing this for beta 4, any ideas? I tried using init by default, but I get a compilation error.

I think there is too much code to post, so instead the file directly.

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 table display:

 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
source share
5 answers

From SwiftSoda.com:

Many Swift programmers have small issues with ViewControllers and Xcode beta 4. Error: viewController is not constructive with ().

But if you look at your view controller, you will see another error: Class viewController has no initializers. Following it (replace any outputs that you use) NSTextField has an optional type of "NSTextField".

Setting IBOutlets with? the end fixes the problem. After that, you will need to change some syntax every time the Outlets variable is used with !.

Here is a quick 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!" } } 
+10
source

There was the same error because one of my properties was not initialized. Hope this helps some nations.

+6
source

I find the easiest way is to simply override the init function without the 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) } 
+3
source

you can safely expand any options using the IBOutletName statement:

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

This way your application will not crash.

Am I trying to get IBOutlets to work without use? and! (optionals), but so far this seems to be the only thing that works in beta with NSViewController.

0
source

Implement below in your view controller:

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

Source: https://habr.com/ru/post/972675/


All Articles