NSPredicate 未在 CoreData 中返回 Int32
Posted
技术标签:
【中文标题】NSPredicate 未在 CoreData 中返回 Int32【英文标题】:NSPredicate Not Returning Int32 in CoreData 【发布时间】:2018-08-02 08:50:19 【问题描述】:Int32 的谓词不起作用。
我在核心数据中有一个实体,它为它的一个属性保存 Int32(见下文)。
我已经通过 fetch 验证了 Core Data 中存储了数据:
我想扫描核心数据实体并检查条目,使用 Int32 的 Predicate:
extension serialPortIO
// ************************************************
// MARK: - Core Data - Search for Object using uuid
// ************************************************
func entityExists(moc: NSManagedObjectContext, ioKitDevice: UInt32) -> Bool
var result: Bool = false
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "SerialPortENT")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "ioKitDevice", ascending: true)]
//fetchRequest.predicate = NSPredicate(format: "ioKitDevice = %i", Int32(ioKitDevice))
do let fetchResults = try moc.fetch(fetchRequest) as! [SerialPortENT]
if fetchResults.count == 0 result = false else result = true
catch
messageClass().aLog(message: "[\(ioKitDevice) :: Record search error]", .Error)
return result
每当我运行时,结果总是错误的。
【问题讨论】:
试试fetchRequest.predicate = NSPredicate(format: "ioKitDevice = %@", NSNumber(value: ioKitDevice)
嗨,这也可以:fetchRequest.predicate = NSPredicate(format: "ioKitDevice = %i", ioKitDevice)
【参考方案1】:
在 CoreData (Swift 4) 中使用 Int32 的 NSPredicate 的工作代码
// Create Entity Description
let entityDescription = NSEntityDescription.entity(forEntityName: "Photos", in: appDelegate.managedObjectContext)
print(ISRecordThere(Entity: Entity, ID: 5)) // True or False
这里是获取数据功能
func ISRecordThere(Entity :NSEntityDescription,ID:Int?) -> Bool
let fetchRequest = NSFetchRequest<NSFetchRequestResult>()
fetchRequest.predicate = NSPredicate(format: "id == %i", ID!)
// Configure Fetch Request
fetchRequest.entity = Entity
do
let Fetchedresult = try appDelegate.managedObjectContext.fetch(fetchRequest)
if Fetchedresult.count > 0
let result:NSManagedObject = Fetchedresult[0] as! NSManagedObject
if result.value(forKey: "id") as? Int != ID
return false
else
return true
else
return false
catch
let fetchError = error as NSError
print(fetchError)
return false
【讨论】:
以上是关于NSPredicate 未在 CoreData 中返回 Int32的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NSPredicate 从 CoreData 中删除选定数量的行?
NSPredicate:“添加”一对多关系CoreData中所有实体的属性值