CoreData:无法为实体加载类

时间:2014-12-01 19:57:09

标签: ios core-data swift entity nsmanagedobject

我在使用Core Data中的关系时遇到了问题。我创建了我的数据模型,包括以下实体:用户,对话,消息,参与者 - 每个实体都包含与其后面的实体的一对多关系。我使用Editor生成了每个实体的类 - >创建NSManagedObject子类,并为每个类正确创建.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" to"其他Linker Flags"对于该项目,正如其他各种职位的人员所建议的那样。这些都是我能找到的修复,但我仍然得到同样的错误。这是我的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)
    }
}

有人知道我做错了什么吗?我已经尝试过我能遇到的每一个问题,但到目前为止似乎没有任何工作。

编辑:尝试在下面的第三行创建一个新的User对象时发出警告:

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

1 个答案:

答案 0 :(得分:0)

参考我自己的answer,也许您还应确保强制任何获取结果到相应的类。 E.g。

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

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

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