将我的应用程序从 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
我做错了什么? 如果您需要更多信息,请告诉我。
最佳答案
访问错误是由于属性中的可选值和非可选值造成的。 该属性没有任何值,即 nil,并且您已将其声明为非可选。这就是为什么它尝试访问内存中未分配的值。
要解决这个问题: 1.开放核心数据模型。并将 Claim 属性声明为 选项类型如 dateCreated?
如果值不可用,这将设置 nil 值。
关于ios - 从 NSPredicate 访问实体时的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013571/