2014-07-22 18 views
6

Sto ricevendo questo errore su un file che funziona in precedenza su tutte le altre beta, per qualche motivo nella versione beta 4 xcode visualizza questo errore, è l'unico file in l'intero progetto che lo fa e non sono sicuro del motivo per cui lo fa solo per la beta 4, qualche idea? ho provato a utilizzare l'init di default su di esso ma ottengo un errore di compilazione.Classe 'ViewController' non ha errori di inizializzazione: xcode Beta 4

penso ci sia troppo codice da inserire, quindi invece il file è diretto.

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

e Tableview visualizzazione:

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) 
     }) 
} 
+2

spettacolo codice si prega di –

+0

suo un sacco di codice? sarebbe meglio collegare a un file? – bevbomb

+1

È possibile mostrare le parti pertinenti senza mostrarle tutte. Ad esempio, mostra la tua classe e almeno la prima riga dei suoi inizializzatori ... È stato aggiunto il codice – jtbandes

risposta

10

Da SwiftSoda.com:

Molti Swift programmatori stanno avendo un po 'di problemi con ViewControllers e Xcode beta 4. L'errore è viewController non è costruibile con().

Ma se guardi il tuo View Controller, vedrai un altro errore, la classe viewController non ha inizializzatori. Seguito da (sostituisci con tutti i punti vendita che stai utilizzando) NSTextField ha un tipo non opzionale 'NSTextField'.

Impostazione degli IBOutlet con? la fine corregge il problema. Dopodiché avrai bisogno di cambiare qualche sintassi ogni volta che la variabile Outlet viene usata con!.

Ecco un breve esempio:

//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!" 
} 
} 
+0

Questo ha funzionato! ora ho incontrato un altro problema, aprirò un altro thread. Grazie! – bevbomb

+0

Utilizzare un punto esclamativo anziché un punto interrogativo ha funzionato per me. – afinom

0

si può decidere di scartare in modo sicuro eventuali optional con se IBOutletName dichiarazione come questa:

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

In questo modo la vostra applicazione non vada in crash.

Sto cercando di far funzionare IBOutlets senza utilizzare? e ! (optionals), ma finora sembra essere l'unica cosa che funziona in beta4 con un NSViewController.

3

Credo che il modo più semplice è solo ignorare una funzione init senza comando parola chiave e basta chiamare super.init, e funziona in questo modo

@IBOutlet weak var tableView: UITableView! 

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

} 
+0

Ha funzionato per me ... Grazie! –

6

avuto lo stesso errore perché una delle mie proprietà non era inizializzata . Speranza che aiuta alcuni popoli

+0

puoi chiarire? –

+0

Una delle mie proprietà nel mio viewcontroller non è stata inizializzata. Ho impostato questa proprietà su un valore predefinito e l'errore scompare.Sembra che la variabile non inizializzata debba essere inizializzata o dovresti specificare che non sono obbligatorie con? character – Beninho85

+0

Questo ha funzionato per me. Avevo una proprietà che non è stata inizializzata, quindi ho impostato la variabile come facoltativa (?) E ha funzionato. – RMH

0

Implementare il qui sotto nella tua controller della vista:

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