2015-12-07 52 views
0

我想从核心数据获取分数(NSDates)并返回一个日期。如果coreData为空,则返回00:00:00.00,如果不是,则显示第一个日期。转换AnyObject?到NSDate

我有以下代码:

func getHighScore() -> NSDate { 
    let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
    let context = appDel.managedObjectContext 

    var entity = NSFetchRequest(entityName: "Score") 
    entity.returnsObjectsAsFaults = false 


    var score = NSFetchRequest(entityName: "Score") 
    score.returnsObjectsAsFaults = false 

    let results: [AnyObject] 
    results = context!.executeFetchRequest(score, error: nil)! 
    println("\(results.count) scores available") 

    dateFormatter.dateFormat = "HH:mm:ss.SS" 
    var highScore : NSDate = dateFormatter.dateFromString("00:00:00.00")! 

    if (results.count>0){ 
      var time: AnyObject? = results[0].valueForKey("time") 
      println(time) 
      var highScore = time as NSDate 


     return highScore 
    } 
    else { 
     return dateFormatter.dateFromString("00:00:00.00")! 
    } 
} 

当我尝试行:

var highScore = time as NSDate 

我得到的错误“AnyObject?不转换为NSDate的”,当我强迫丧气,并更改为:

var highScore = time as! NSDate 

我得到的错误‘致命错误:意外发现零而展开的可选值’。

任何帮助将不胜感激:)

+0

为什么你声明'results'为'[AnyObject]'因为你知道这是最有可能的'[NSManagedObject]'? Swift鼓励开发人员尽可能地具体。 – vadian

回答

0

它看起来像时间为零。

尝试if let hs = time as? NSDate{ highscore = hs}

+0

嗨,谢谢你的回复。当我添加该行代码 'var highScore = time as! NSDate if let hs = time as? NSDate {highscore = hs}' 我得到错误'无法指定一个类型为'ULabel!'的值的NSDate类型的值 –

+0

您是否删除了var var highScore = time! NSDate'? hs被定义为UILabel的地方吗? – Shane11

+0

是的,我已经删除了'var highScore = time as! NSDate的”。不,我没有在任何地方使用'hs'。如果我将“hs”更改为“test”或“abc”等任何内容,我会得到同样的错误。 –