【发布时间】: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 只是想念它。
我尝试阅读以下内容:
我还有什么遗漏的吗?
【问题讨论】:
-
也许演员应该是
User?而不是User? -
当我这样做时,当我在swift中执行
println(user)时,我会得到nil。 -
这意味着你的 get 方法有问题。你不能在没有错误的情况下对 nil 进行类型转换(它实际上是我见过的正确
undefined函数的定义之一)。 -
我得到了下面的解决方案。它在
Objective-C方面运行良好——我看到断点可以正确获取值。由于某种原因,它只是没有传递给Swift。 -
我必须添加
@objc(User),如下所示。
标签: objective-c swift nsmanagedobjectmodel