核心数据:找不到成员 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的主要内容,如果未能解决你的问题,请参考以下文章