ios – 使用Coredata Swift发送到实例的无法识别的选择器

ios – 使用Coredata Swift发送到实例的无法识别的选择器,第1张

概述每当我尝试更新核心数据模型的值时,我都会收到此错误. 这是我的模特 import Foundationimport CoreData@objc(Habit)class Habit: NSManagedObject { @NSManaged var name: String @NSManaged var trackingType: NSNumber} 这是我的代码tabl 每当我尝试更新核心数据模型的值时,我都会收到此错误.
这是我的模特

import Foundationimport CoreData@objc(Habit)class Habit: NSManagedobject {    @NSManaged var name: String    @NSManaged var trackingType: NSNumber}

这是我的代码tableVIEwCell

overrIDe func setSelected(selected: Bool,animated: Bool) {        super.setSelected(selected,animated: animated)        if selected {            self.accessoryType = UItableVIEwCellAccessoryType.checkmark            if self.habit? != nil {                self.habit?.trackingType = index            }        } else {            self.accessoryType = UItableVIEwCellAccessoryType.None        }        // Configure the vIEw for the selected state    }

我一直收到错误“由于未捕获的异常终止应用程序’NSinvalidargumentexception’,原因:’ – [习惯setTrackingType:]:无法识别的选择器发送到实例0x7fdcbb002c90’”

在线
self.habit?.trackingType = index

我在最近2天努力解决这个问题.

编辑:

模型习惯以下面的方式初始化

func getHabits() -> [AnyObject]{        let entityDescription =        NSEntityDescription.entityForname("Habit",inManagedobjectContext: managedobjectContext!)        let request = NSFetchRequest()        request.entity = entityDescription//        //        let pred = nspredicate(format: "(trackingType != -1)")//        request.predicate = pred        var error: NSError?        var objects = managedobjectContext?.executeFetchRequest(request,error: &error)        return objects!;    }

返回的列表在应用程序的任何位置都使用.基本上我从列表中获取和项目并更新其属性,然后再次保存

解决方法 好的,所以你得到错误的原因当然是因为self.habit引用的对象不是Habit对象.找出对象真正原因的最简单方法是调用:

print(NsstringFromClass(habit.class))

使用核心数据和自定义NSManagedobjects,您需要确保实体:’Habit'(在您的数据模型中)具有设置为Habit的类.这可确保Core Data将带有“Habit”实体描述的已获取对象强制转换为Habit类.如果你不这样做,那么getHabits func将返回一个NSManagedobjects数组而不是Habits数组.如果是这种情况,则代码:println(NsstringFromClass(habit.class))将“NSManagedobject”打印到调试器.

作为旁注,您确实需要在从Core Data数据库中获取对象时检查错误.添加行:

if objects? == nil {    print("An error occurred \error.localisedDescription")}

如果有任何错误,请原谅我的swift,我通常使用Objective-C.

编辑:为了纠正无法在NSManagedobject类’X’错误上调用指定的初始化程序.如果未正确实例化NSManagedobject,则会触发此错误.你不能调用[[MyManagedobject alloc] init];你必须调用initWithEntity:insertIntoManagedobjectContext:

MyManagedobject *obj = [[MyManagedobject alloc] initWithEntity:[NSEntityDescription entityForname:@"MyManagedobject" inManagedobjectContext:context] insertIntoManagedobjectContext:context];

如果您不希望将对象obj插入上下文,则可以传递nil上下文参数.但是,如果您想要撤消管理以及将对象保存到数据库的能力,则需要将其与上下文相关联.

如果要对对象进行自定义初始化,则可以覆盖awakeFromInsert和awakeFromFetch方法/函数.

总结

以上是内存溢出为你收集整理的ios – 使用Coredata Swift发送到实例的无法识别的选择器全部内容,希望文章能够帮你解决ios – 使用Coredata Swift发送到实例的无法识别的选择器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1070129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存