无法加载类警告?

Posted

技术标签:

【中文标题】无法加载类警告?【英文标题】:Unable to load class warning? 【发布时间】:2015-05-08 16:28:20 【问题描述】:

我正在制作一个精灵套件游戏,需要保存三个整数:currentLevel、maxLevelReached 和 highScore。我也想将这些实现到 iCloud,但这对我来说是另一个步骤,首先我想弄清楚我现在遇到的问题。基本上,我正在尝试使用核心数据来存储这些数据。在我的应用委托中,我添加了以下内容(基本上我创建了新项目并复制了核心数据代码)

    // MARK: - Core Data stack

lazy var applicationDocumentsDirectory: NSURL = 
    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    return urls[urls.count-1] as! NSURL
    ()

lazy var managedObjectModel: NSManagedObjectModel = 

    let modelURL = NSBundle.mainBundle().URLForResource("GameState", withExtension: "momd")!
    return NSManagedObjectModel(contentsOfURL: modelURL)!
    ()

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = 
    var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("APPNAME.sqlite")
    var error: NSError? = nil
    var failureReason = "There was an error creating or loading the application's saved data."
    if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil 
        coordinator = nil
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason
        dict[NSUnderlyingErrorKey] = error
        error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        NSLog("Unresolved error \(error), \(error!.userInfo)")
        abort()
    

    return coordinator
    ()

lazy var managedObjectContext: NSManagedObjectContext? = 
    let coordinator = self.persistentStoreCoordinator
    if coordinator == nil 
        return nil
    
    var managedObjectContext = NSManagedObjectContext()
    managedObjectContext.persistentStoreCoordinator = coordinator
    return managedObjectContext
    ()

// MARK: - Core Data Saving support

func saveContext () 
    if let moc = self.managedObjectContext 
        var error: NSError? = nil
        if moc.hasChanges && !moc.save(&error) 
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog("Unresolved error \(error), \(error!.userInfo)")
            abort()
        
    

当我这样做时,我创建了我的数据模型(File->new->CoreData->Data 模型)并将其命名为 GameState。然后我创建了名为 CurrentLevel 的实体,并添加了 Int16 类型的属性并命名为 currentLevel。我创建了 Appname.CurrentLevel 类的实体。然后,在我的游戏场景中,我添加了以下属性:

var currentLevel = [NSManagedObject]()
var levelToShow: Int16!

并创建了这两个函数来处理核心数据。

    //Handling the fetching from the CoreData
func fetchTheStuff() 

    //1
    let appDelegate =
    UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext!

    //2
    let fetchRequest = NSFetchRequest(entityName:"CurrentLevel")

    //3
    var error: NSError?

    let fetchedResults =
    managedContext.executeFetchRequest(fetchRequest,
        error: &error) as? [NSManagedObject]

    if let results = fetchedResults 
        currentLevel = results
        println(currentLevel)
     else 
        println("Could not fetch \(error), \(error!.userInfo)")
    




//Handling the saving

func saveCurrentLevel(cLevel: Int16)

    let appDelegate =
    UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext!

    let entity =  NSEntityDescription.entityForName("CurrentLevel",
        inManagedObjectContext:
        managedContext)

    let curLevel = NSManagedObject(entity: entity!,
        insertIntoManagedObjectContext:managedContext)

    curLevel.setValue(name, forKey: "currentLevel")

    var error: NSError?
    if !managedContext.save(&error) 
        println("Could not save \(error), \(error?.userInfo)")
    


如您所见,获取功能仍处于测试阶段(我只是打印结果)。如果我第一次使用该应用程序时获取它,它会给我一个空字符串,因为它应该是。但是,如果我尝试使用 save 函数保存一个数字,然后获取这些内容,则日志屏幕会给我以下警告:

CoreData:警告:无法为实体“CurrentLevel”加载名为“appname.CurrentLevel”的类。找不到类,改用默认的 NSManagedObject。

知道了我要实现的功能,看到了我(尝试)使用的方法,有谁知道我的问题如何解决?

附:此外,这整个核心数据的东西似乎相当复杂,即使我阅读了很多关于它的内容,我也很难理解它是如何工作的。因此,如果有人建议降低复杂性以实现相同的结果(因此,不使用任何功能),我们非常欢迎您提出建议。

【问题讨论】:

你是否为 coredata 模型正确生成了类文件? 抱歉,您能解释一下您的意思吗?我希望我知道。 在您的核心数据模型中。突出显示实体并选择 Editor -> Create NSObject subclass。这需要一个与您的代码匹配的正确设置模型 好的,显然这解决了警告问题。我会将其标记为答案,但我不能因为它在评论中。另外,现在我有一个新问题——currentLevel = Nil。有什么想法吗? 我为您的问题的未来读者创建了一个答案。如需更多信息,请提供更具体的代码或(更好)打开一个新问题 【参考方案1】:

回答最初的问题 请确保为您的 Coredata 模型生成正确的类,突出显示您的实体,然后选择 Editor -> Create NSObject subclass

【讨论】:

以上是关于无法加载类警告?的主要内容,如果未能解决你的问题,请参考以下文章

`PHP 警告:PHP 启动:无法加载动态库 'mcrypt.so'

PHP 警告:PHP 启动:无法加载动态库 'bz2'

无法从 nib 实例化 UIView。 “警告:无法加载任何 Objective-C 类信息”

Composer 安装“PHP 警告:PHP 启动:无法加载动态库 'gd2'”

CoreData:警告:无法加载名为的类

Swift 2.0 错误:警告:无法加载任何 Objective-C 类信息