Преобразование AnyObject? в NSDate

Я пытаюсь получить оценки (NSDates) из основных данных и вернуть дату. Возвращает 00:00:00.00, если coreData пуст, и отображает первую дату, если это не так.

У меня есть следующий код:

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

Я получаю сообщение об ошибке «фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения».

Любая помощь будет оценена по достоинству :)


person Jess Murray    schedule 07.12.2015    source источник
comment
Почему вы объявляете results как [AnyObject], если вы знаете, что это, скорее всего, [NSManagedObject]? Swift призывает разработчика быть как можно более конкретным.   -  person vadian    schedule 08.12.2015


Ответы (1)


Кажется, время равно нулю.

Попробуйте if let hs = time as? NSDate{ highscore = hs}

person Shane11    schedule 07.12.2015
comment
Привет, спасибо за ваш ответ. Когда я добавляю эту строку кода 'var highScore = time as! NSDate если пусть hs = время как? NSDate{highscore = hs} 'я получаю сообщение об ошибке 'невозможно присвоить значение типа NSDate значению типа 'ULabel!' - person Jess Murray; 07.12.2015
comment
Вы удалили 'var highScore = time as! NSDate ? Определен ли где-то hs как UILabel? - person Shane11; 08.12.2015
comment
Да, я удалил 'var highScore = time as! NSDate'. Нет, я нигде не использовал «hs». Я получаю ту же ошибку, если я изменяю «hs» на что-либо, например «test» или «abc». - person Jess Murray; 08.12.2015
comment
Хм. Что распечатывается из print(time) ? Какая строка вызывает ошибку? Эта ошибка указывает мне, что у вас есть что-то определенное как UILabel, и вы пытаетесь сделать его равным NSDate. - person Shane11; 08.12.2015
comment
Привет! Я изменил highscore = hs на «highScore = hs», и это сработало, однако, когда отображается println (время), он показывает ноль? - person Jess Murray; 08.12.2015
comment
Ваш объект результатов не имеет ключевого времени. Попытка распечатать объект результатов, чтобы увидеть, что это такое - person Shane11; 08.12.2015
comment
Когда я печатаю результаты, я получаю «NSManagedObject: 0x7fb2c9d4cbe0› (сущность: Score; id: 0xd000000000100000 ‹x-coredata://161F7D01-41B1-4B21-AF9F-8911667B1A6A/Score/p4›; data: {time = 2015- 12-07 21:32:48 +0000; })', который содержит время = 2015-12-07 21:32:48 +0000, которое я хочу вернуть в этой функции. Любые идеи, как я могу заставить это вернуться? - person Jess Murray; 08.12.2015
comment
если я изменю [0] на [1] в строке «var time: AnyObject? = results[1].valueForKey(time)', кажется, работает. Первое значение всегда должно быть нулевым. Странный! - person Jess Murray; 08.12.2015