swift_dynamicCastClassUnconditional проблемы в swift

У меня есть следующее NSManagedObject в кратчайшие сроки:

import Foundation
import CoreData

public class User: NSManagedObject {

    @NSManaged public var first_name: String
    @NSManaged public var last_name: String
}

У меня есть класс, который предоставляет значение с помощью функции ниже:

- (id)getUserAtIndexPath:(NSIndexPath *)indexPath {
    User *user = [self.fetchedResultsController objectAtIndexPath:indexPath];
    return user;
}

Когда я вызываю эту функцию из Objective-C класс, все отлично работает. Я называю так:

User *user = [self.userAccessor getUserAtIndexPath:indexPath];

И я могу продолжать оттуда. Когда я звоню с Swift класс вроде так:

let user: User = self.userAccessor.getUserAtIndexPath(indexPath) as User

Я получаю swift_dynamicCastClassUnconditional каждый раз. Что-то я делаю не так? Почему та же самая функция работает в Objective-C и не Swift? Я даже поставил точку останова и могу подтвердить Swift вызов возврата является допустимой переменной! Кое как Swift просто скучаю по нему.

Я попытался прочитать ниже на этом:

http://jamesonquave.com/blog/understanding-the-fatal-error-cant-unwrap-optional-none-errors-in-swift/

Массив AnyObject, возвращаемый ошибками NSFetchRequest с "Сбой динамического приведения Swift" при приведении в Swift XCode 6 Beta 4 в XCTestCase

Есть что-то еще, что я пропускаю?

1 ответ

Решение

Я получил решение здесь:

Swift: точка останова в библиотеке CoreData

В основном я должен был поставить @objc(User) прямо над кодом управляемого объекта. Так, как показано ниже:

@objc(User)
public class User: NSManagedObject {
    @NSManaged public var first_name: String
    @NSManaged public var last_name: String
}

Это решило проблему. Дело закрыто.

Другие вопросы по тегам