【问题标题】:fetch with predicate always return nil使用谓词获取总是返回 nil
【发布时间】:2015-06-20 16:48:17
【问题描述】:

我有两个实体,一个是“对象”,另一个是“徽标”,它们具有一对一的关系。当我向核心数据添加一些徽标时,我想检查我的对象是否已经有一个。所以我制作谓词并用它获取。但是我的结果总是0,所以没有logo.object.id == id这样的Logo。

我确定它们在那里,所以我不确定这段代码。也许谓词是错误的?你能给点建议吗?

class func fetchLogoWithId(moc: NSManagedObjectContext, id: Int64) -> Logo? {
        var fetchRequest = NSFetchRequest(entityName: "Logo")
        fetchRequest.predicate = NSPredicate(format: "object.id == %d", id)

        var error: NSError?

        if moc.countForFetchRequest(fetchRequest, error: &error) == 0 {
            return nil
       }

        var logo = moc.executeFetchRequest(fetchRequest, error: &error)
        if error != nil {
            return nil
        }

        println("--------------")
        println(logo)
        println("--------------")
        return logo?.first as? Logo
    }

【问题讨论】:

  • Core Data 模型检查器中的“id”属性是如何定义的?如果您添加谓词,获取请求是否会返回某些内容?结果中是否有想要的对象?
  • id 是 Object 实体的 int64 属性
  • 返回实体中的所有对象
  • 激活 Core Data SQLite 调试 (stackoverflow.com/questions/12306343/…) 并将输出添加到您的问题中。
  • 你还应该展示你是如何调用这个函数的,并确保你传递了你认为你正在传递的 ID。

标签: ios swift core-data nspredicate nsfetchrequest


【解决方案1】:

我有点猜测,但问题可能是 %d 格式格式化一个 C int 值,它是一个 32 位的数量 32 位设备。对于 64 位整数,您应该将谓词替换为

NSPredicate(format: "object.id == %lld", id)

NSPredicate(format: "object.id == %@", NSNumber(longLong: id))

【讨论】:

  • @user3224534:我在对您的问题的评论中建议的调试怎么样?
猜你喜欢
  • 2015-12-01
  • 2017-03-28
  • 2015-03-05
  • 2014-08-25
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多