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)
})
}
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!"
}
}
Had the same error because one of my properties was not initialized. Hope it helps some peoples
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)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With