Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSEntityDescription.insertNewObjectForEntityForName不能类型转换为NSManagedObject子类_Ios_Swift_Core Data - Fatal编程技术网

Ios NSEntityDescription.insertNewObjectForEntityForName不能类型转换为NSManagedObject子类

Ios NSEntityDescription.insertNewObjectForEntityForName不能类型转换为NSManagedObject子类,ios,swift,core-data,Ios,Swift,Core Data,我的核心数据堆栈中有一个简单的实体(称为日记)。此实体有一个属性(名称) 我使用编辑器生成了NSManagedObject子类。我还确保类名遵循appNameDiaryEntry格式 xcode 7删除“.”并给我一个名为:appNameDiaryEntry 这是我正在使用的代码 let diaryEntry : DiaryDiaryEntry diaryEntry = NSEntityDescription.insertNewObjectForEntityForName("DiaryDiar

我的核心数据堆栈中有一个简单的实体(称为日记)。此实体有一个属性(名称)

我使用编辑器生成了NSManagedObject子类。我还确保类名遵循appNameDiaryEntry格式

xcode 7删除“.”并给我一个名为:appNameDiaryEntry

这是我正在使用的代码

let diaryEntry : DiaryDiaryEntry

diaryEntry = NSEntityDescription.insertNewObjectForEntityForName("DiaryDiaryEntry", inManagedObjectContext: dataStoreController.managedObjectContext!) as DiaryDiaryEntry
在上面的代码中,DiaryDiaryEntry是从coredata模型创建的NSManagedObject子类

我这样说是错误的

“NSManagedObject”不能转换为“DiaryDiaryEntry”

如果我使用as强制向下投射,它可以工作,但我在运行时收到一个错误(因为该值为零,是强制解包的?)


有没有办法解决这个问题?谢谢,Karthik

你肯定得用
来贬低自己NSEntityDescription.insertNewObjectForEntityForName(…)
返回
nil
时,显然还有其他问题。您应该检查实体名称是否正确(必须与数据模型中为实体指定的名称相同)。打开数据模型并选择所需实体时,您可能需要查看数据模型检查器:您必须在
class
下指定类的名称,并在
Module
下为您的案例选择
Current Project Module
,我建议使用相同的实体名称和类名。(更多细节)因此,您应该删除(笨拙的)“DiaryDiaryEntry”,并将其替换为“DiaryEntry”

首先,由于
insert..
返回
AnyObject
,因此需要强制转换它。使用
as有几种方法具有最高的运行时崩溃风险

您还可以将其设置为具有以下内容的警卫:

let entity = NSEntityDescription.insertNewObjectForEntityForName("DiaryDiaryEntry", inManagedObjectContext: dataStoreController.managedObjectContext!) as? DiaryDiaryEntry else { fatalError("Failed to load subclass") }
这仍然会像我写的那样给你一个运行时错误,但它允许你控制事件

至于返回一个
nil
,这表示您的模型或代码行中的实体名称中有一个类型。那行代码应该永不返回
nil
。我怀疑您的实际实体名称是
DiaryEntry


正如Mundi指出的,您的类名有点重复。虽然他喜欢保持类名和模型名相同,但我更喜欢为我的类名添加后缀,这将使您的
DiaryEntryMO
在维护代码时非常容易使用。

感谢您的帮助。我更改了类名以匹配实体名(以前它不工作,因为xcode抱怨它找不到该类,但我认为在创建NSManaged子类时没有显式指定类名)。。。我仍然得到nil异常,这是因为managedObject上下文为nil。控制器的storeURL(指向MySql.sqlite)在该位置没有显示任何具有该名称(即MySql.sqlite)的内容…?感谢Oliver&Marcus的输入。似乎出于某种原因,我的managedObject上下文为零。请看我上面的评论…有什么想法吗?