核心数据:找不到成员 executeFetchRequest

Posted

技术标签:

【中文标题】核心数据:找不到成员 executeFetchRequest【英文标题】:Core Data: Could not find member executeFetchRequest 【发布时间】:2014-08-04 14:46:48 【问题描述】:

有谁知道为什么我在下面的代码中会出现上述错误?

var moc:NSManagedObjectContext? = managedObjectContext!;
var req:NSFetchRequest = NSFetchRequest();
var ent:NSEntityDescription = NSEntityDescription.entityForName(entityName, inManagedObjectContext: moc);
req.entity = ent;
var err:NSError? = nil;
var result = moc!.executeFetchRequest(req, error: err);

我已经检查了另一个带有此错误消息的 SO 票,但无法弄清楚。 result 是从 moc!.executeFetchRequest 推断出来的(作为 NSArray),方法签名似乎是正确的,为什么在 moc 上找不到 executeFetchRequest

【问题讨论】:

我很惊讶您没有收到来自var moc:NSManagedObjectContext? = managedObjectContext!; 的错误顺便说一句,您不需要; 来终止Swift 中的行。 为什么该行会有错误? managedObjectContext 来自 Core Data 默认代码中延迟创建的属性。我知道我不需要分号,但我喜欢它们。使代码在某些部分更具可读性。 【参考方案1】:

错误信息具有误导性。你必须传递错误变量的地址

var err:NSError? = nil
var result = moc!.executeFetchRequest(req, error: &err)

另外,我似乎没有必要将本地上下文变量定义为可选的, 如果可以从 语境。所以你的代码可以简化为

let moc = managedObjectContext!
let req = NSFetchRequest(entityName: entityName)
var err:NSError? = nil
let result = moc.executeFetchRequest(req, error: &err)

【讨论】:

哎呀,没看到!谢谢! @Martin R 我写的代码和你的一样,我仍然得到相同的代码。我讨厌斯威夫特! @jerry_sjtu:我已将上述代码复制到 Xcode 6.1 中的新 Core Data 项目中,并且编译没有问题。你到底得到了什么错误信息,在哪一行? 对不起,我只是发现我没有打开可选上下文。

以上是关于核心数据:找不到成员 executeFetchRequest的主要内容,如果未能解决你的问题,请参考以下文章

易语言:错误(36): 找不到指定的对象成员命令名称“打开”。

核心数据“找不到源存储模型”;

“找不到源存储的模型”核心数据错误

为啥应用程序找不到我恢复的核心数据文件?

核心数据迁移 - 找不到迁移的映射模型

在此模型中找不到名为“Book”的实体。 ios核心数据错误?