从NSPredicate

时间:2015-10-08 10:45:30

标签: ios swift swift2 nspredicate

将我的应用从iOS7更新到iOS9时,我遇到了这个奇怪的问题。 此代码在iOS7和iOS8上运行正常,但在使用iOS9时,我在尝试获取一个属性的值时收到此错误消息“EXC_BAD_ACCESS”。

这是代码

let fetchRequest = NSFetchRequest(entityName: "Claim")
fetchRequest.predicate = NSPredicate(format: "userType == %d", role)

do
    {
        let retValue = try managedObjectContext.executeFetchRequest(fetchRequest) as! [Claim]

        if (retValue.count > 1)
        {
            for cEntity in retValue
            {
                print("--")
                print("cEntity.claimID: \(cEntity.claimID)")
                print("cEntity.dateCreated: \(cEntity.dateCreated)")  <-- EXC_BAD_ACCESS HERE
             }
         }
    }
    catch {
        print("Error!!!")
    }

在iOS7和iOS8上打印:

--
cEntity.claimID: 1962872
cEntity.dateCreated: 2015-04-12 22:46:30 +0000
--
cEntity.claimID: 1962839
cEntity.dateCreated: 2015-04-12 22:36:33 +0000

在iOS9上打印

--
cEntity.claimID: 1962872

我做错了什么? 如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

错误访问是由属性中的可选和非可选值引起的。 该属性没有任何值,即nil,并且您已将其声明为非可选。这就是为什么它试图访问未在内存中分配的值。

解决这个问题: 1.开放核心数据模型。并声明Claim属性属性为     选项类型如dateCreated?

  1. Open&#34; Claim&#34;实体。

  2. 选中属性属性enter image description here

  3. 中的可选项

    如果值不可用,则设置nil值。