Home > database >  Swift 5 NSFetchRequest predicate when trying to lookup a String UUID
Swift 5 NSFetchRequest predicate when trying to lookup a String UUID

Time:06-01

I have a string UUID coming into this method, to lookup an entity in CoreData that has UUID's saved as UUID type (Not String).

I keep getting "Fatal error: Unexpectedly found nil while unwrapping an Optional value" on line for the predicate.

func loadUser(uuid: String) -> [ExistingUsers2] {
    let request : NSFetchRequest<ExistingUsers2> = ExistingUsers2.fetchRequest()
    let uuidQuery = NSUUID(uuidString: uuid)
    request.predicate = NSPredicate(format: "%K == %@", #keyPath(ExistingUsers2.uuid), uuidQuery! as CVarArg)
    request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
    do {
        existingUsersArray = try context.fetch(request)
        print("Returned \(existingUsersArray.count)")
    } catch {
        print("Error fetching data from context \(error)")
    }
    return existingUsersArray
}

Any help? I haven't found anything here or Dr Google. TKS

CodePudding user response:

Try this as your predicate: NSPredicate(format: "cid = %@", "\(id)")

where cid is the UUID in CoreData and id is the UUID you got from the string. Also do not use NSUUID.

CodePudding user response:

You can replace your predicate with this:

guard let uuidQuery = UUID(uuidString: uuid) else { return [] } // no valid UUID with this code
request.predicate = NSPredicate(format: "%K == %@", #keyPath(ExistingUsers2.uuid), uuidQuery as CVarArg)

Everything else should work.

CodePudding user response:

Replace the uuidAttributeName with your attribute name and yourStringuuid with the your string that you want to convert into UUID type.

var uuid = UUID(uuidString: yourStringuuid)

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ExistingUsers2")
fetchRequest.predicate = NSPredicate(format: "uuidAttributeName == %@",uuid)

let results = try context.fetch(fetchRequest)
  • Related