【问题标题】:CoreData: Unable to load class for entityCoreData:无法为实体加载类
【发布时间】:2015-01-29 22:05:45
【问题描述】:

我在使用 Core Data 中的关系时遇到问题。我创建了包含以下实体的数据模型:用户、对话、消息、参与者——每个都包含与它后面的实体的一对多关系。我使用 Editor -> Create NSManagedObject Subclass 为每个实体生成了类,它为每个类正确创建了 .Swift 文件。该项目已构建,但在尝试创建和保存新用户时出现以下错误:

2014-12-01 12:31:28.450 Messenger[2627:151403] CoreData: warning: Unable to load class named 'Messenger.User' for entity 'User'.  Class not found, using default NSManagedObject instead.

我确保我的实体类以项目/模块名称 (Messenger.User) 为前缀。

我还在用户类的正上方添加了“@ObjC(User)”,并在项目的“其他链接器标志”中添加了“-ObjC”,正如人们在其他各种帖子中所建议的那样。这些是我能找到的所有修复程序,但我仍然遇到同样的错误。这是我的 User 类的样子,供参考:

import Foundation
import CoreData
@objc(User)
class User: NSManagedObject {

    @NSManaged var api : API
    @NSManaged var username: String
    @NSManaged var userID: String
    @NSManaged var passcode: String
    @NSManaged var conversations: NSSet

    func findConversations(sourceView: MessengerViewController) {
        api.findConversations(sourceView)
    }
    func addConversation(newConversation: Conversation) {
        self.addConversationObject(newConversation)
    }
}
extension User {
    func addConversationObject(value: Conversation) {
        var items = self.mutableSetValueForKey("conversations");
        items.addObject(value)
    }
    func removeConversationObject(value: Conversation) {
        var items = self.mutableSetValueForKey("conversations");
        items.removeObject(value)
    }
}

有人知道我还做错了什么吗?我已经尝试了所有可能遇到的修复方法,但到目前为止似乎没有任何效果。

编辑:尝试创建新用户对象时出现警告,在下面的第三行:

let userContext : NSManagedObjectContext = self.appDel.managedObjectContext!
let userEntity : NSEntityDescription = NSEntityDescription.entityForName("User", inManagedObjectContext: userContext)!
var newUser = User(entity: userEntity, insertIntoManagedObjectContext: userContext)

【问题讨论】:

    标签: ios core-data swift entity nsmanagedobject


    【解决方案1】:

    参考我自己的answer,也许您还应该确保将任何获取结果转换到适当的类。例如

    let result = context.executeFetchRequest(request, error:nil) as [User]
    

    为了响应您的代码更新,您或许应该尝试如下插入新实例。

    var user = NSEntityDescription.insertNewObjectForEntityForName( "User", 
                inManagedObjectContext: context) as User
    

    【讨论】:

    • 我目前正在使用此方法获取对象,但在执行获取之前尝试将对象添加到核心数据(请参阅我的帖子中的更新)时会出现警告。 @Mundi
    • 我相应地更新了我的答案。这是插入对象的另一种标准方法。请注意,我投射,而你没有。
    • 感谢更新,但不幸的是它仍然产生相同的结果:无法为实体“用户”@Mundi 加载类“Messenger.User”
    • 你使用insertNewObject...方法了吗?您的应用是否名为“模块”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2014-12-24
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多