谓词不适用于 CoreData - Swift 4

Posted

技术标签:

【中文标题】谓词不适用于 CoreData - Swift 4【英文标题】:Predicate doesn't work at CoreData - Swift 4 【发布时间】:2019-02-25 08:06:29 【问题描述】:

我正在尝试使用索引 1 加载名称,但它不起作用(CollectionView 为空)。

核心数据

加载数据:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else  return 

let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequestTag = NSFetchRequest<NSManagedObject>(entityName: "Tag")
let PreValue = 1
let predicate = NSPredicate(format: "index == %i", PreValue)
fetchRequestTag.predicate = predicate

do 
   tagItems = try managedContext.fetch(fetchRequestTag)
 catch let error as NSError 
   print("Could not fetch. \(error), \(error.userInfo)")


TagCollectionView.reloadData()
TagCollectionView.selectItem(at: NSIndexPath(item: 0, section: 0) as IndexPath, animated: false, scrollPosition: [])

for data in tagItems 
   print("\(data.value(forKey: "name") as! String as Any), \(NSKeyedUnarchiver.unarchiveObject(with: data.value(forKeyPath: "index") as! Data) as! Int)")

【问题讨论】:

如果index是一个整数那么为什么设置为Transformable 【参考方案1】:

属性类型和谓词类型不匹配。

Transformable 作为 index 的类型无论如何都是荒谬的。将属性类型设置为Int32,或者如果只有01 索引甚至设置为Bool

【讨论】:

以上是关于谓词不适用于 CoreData - Swift 4的主要内容,如果未能解决你的问题,请参考以下文章

swift CoreData 谓词

CoreData 适用于我的模拟器,但不适用于使用 xCode 6 的 iOS 8 Swift 中的 iPhone

Swift coreData - 格式化日期并在谓词中使用它

Swift CoreData:访问关系比仅通过谓词获取要慢 - 是这样设计的吗?

Coredata fetchrequest 谓词没有显示正确的东西

NSFetchRequest 不适用于谓词