【问题标题】:swift_dynamicCastClassUnconditional issues in swiftswift_dynamicCastClassUnconditional 问题
【发布时间】:2014-12-06 02:10:16
【问题描述】:

我在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 array returned by NSFetchRequest errors with "Swift dynamic cast failed" upon cast in Swift XCode 6 Beta 4 in XCTestCase

我还有什么遗漏的吗?

【问题讨论】:

  • 也许演员应该是User?而不是User
  • 当我这样做时,当我在swift中执行println(user)时,我会得到nil
  • 这意味着你的 get 方法有问题。你不能在没有错误的情况下对 nil 进行类型转换(它实际上是我见过的正确 undefined 函数的定义之一)。
  • 我得到了下面的解决方案。它在Objective-C 方面运行良好——我看到断点可以正确获取值。由于某种原因,它只是没有传递给Swift
  • 我必须添加@objc(User),如下所示。

标签: objective-c swift nsmanagedobjectmodel


【解决方案1】:

我在这里找到了解决方案:

Swift: Breakpoint in CoreData library

基本上我必须将@objc(User) 放在托管对象代码的正上方。所以如下:

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

这解决了问题。结案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多