【问题标题】:Core Data: Could not find member executeFetchRequest核心数据:找不到成员 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 默认代码中延迟创建的属性。我知道我不需要分号,但我喜欢它们。使代码在某些部分更具可读性。

标签: objective-c core-data swift nsmanagedobjectcontext


【解决方案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 项目中,并且编译没有问题。你到底得到了什么错误信息,在哪一行?
  • 对不起,我只是发现我没有打开可选上下文。
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多