这是我的模特
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发送到实例的无法识别的选择器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)