更新核心数据模型后出错 - 无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】更新核心数据模型后出错 - 无法识别的选择器发送到实例【英文标题】:Error after updating core data model - Unrecognized selector sent to instance 【发布时间】:2016-08-20 01:37:52 【问题描述】:

将名为 Unique Identifier 的字符串属性添加到名为 LabelsEnitiy/NSManagedObject 后,出现以下错误。然而,编译器不满意的不是Unique Identifier

2016-08-20 02:20:08.394 AN[22499:8730414] -[AN.Labels 文件夹]: 无法识别的选择器发送到实例 0x7ffe907e1a80 2016-08-20 02:20:08.405 AN[22499:8730414] *** 由于未捕获而终止应用程序 异常'NSInvalidArgumentException',原因:'-[AN.Labels 文件夹]: 无法识别的选择器发送到实例 0x7ffe907e1a80'

这是我的 NSManagedObject 类

class Labels: NSManagedObject 

    @NSManaged var title: String?
    @NSManaged var details: String
    @NSManaged var date: NSDate?
    @NSManaged var uniqueIdentifier: NSString?

    @NSManaged var arrayOfFolders: [Folders]
    @NSManaged var folder: Folders?
    @NSManaged var folders: NSSet

    override func awakeFromFetch() 
        super.awakeFromFetch()
        self.regenerateFolders()
    

    func regenerateFolders() 
        let date = NSSortDescriptor(key: "date", ascending: false)
        if let array = folders.sortedArrayUsingDescriptors([date]) as? [Folders] 
            self.arrayOfFolders = array
        
        

我已确保该应用使用新的 coreData 模型,并且在我的 CoreData Stack 中有以下内容。我已经有一段时间没有遇到这个问题了,因为我的应用会自动更新以使用最新的核心数据模型。

var storeDirectoryURL: NSURL 
    return try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)


var storeURL: NSURL 
    return self.storeDirectoryURL.URLByAppendingPathComponent("SingleViewCoreData.sqlite")


func setupCoreData() 
    let modelURL = NSBundle.mainBundle().URLForResource("AN", withExtension: "momd")
    let model = NSManagedObjectModel(contentsOfURL: modelURL!)

    try! NSFileManager.defaultManager().createDirectoryAtURL(self.storeDirectoryURL, withIntermediateDirectories: true, attributes: nil)

    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model!)
    let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
    try! coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: self.storeURL, options: options)

    managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
    managedObjectContext.persistentStoreCoordinator = coordinator
    managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy   

有人有什么建议吗?

【问题讨论】:

【参考方案1】:

检查核心数据模型中标签和文件夹之间的关系。您可能将反向关系命名为标签以外的名称。

【讨论】:

以上是关于更新核心数据模型后出错 - 无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObject 无法识别的选择器发送到实例

核心数据:发送到实例的无法识别的选择器

核心数据错误 - NSDatelocalizedCaseInsensitiveCompare:无法识别的选择器发送到实例

NSURLRequest 出错,无法识别的选择器发送到实例

NSManagedObject 子类 - 发送到实例的无法识别的选择器

核心数据-[Decodable.Address initWithCoder:]:发送到实例的无法识别的选择器