Я пытаюсь выполнить сравнение строк перед сохранением в Core Data.
Строка, которая будет сохранена в Core Data, будет содержать список физических упражнений. Цепочка упражнений должна быть сохранена только один раз независимо от порядка.
Пример:
let str1 = "Burpees Rowing Running"
// This is in Core Data
let str2 = "Running Rowing Burpees"
// This is an attempt to save to Core Data. It should *fail* because there is already an exercise set with these exercises - just not in the same order.
Мой прогресс:
func checkEntityThenSave(exerciseGroup:String){
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "SavedExerciseSets")
let predicate = NSPredicate(format: "upperBody.sortedComponents == %@", exerciseGroup.components(separatedBy: " ").sorted())
request.predicate = predicate
request.fetchLimit = 1
do{
let count = try context.count(for: request)
print("Count - \(count)") // Always evaluates to 0
if(count > 0){
// Save to Core Data
}
else{
// Show Alert
}
}
catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
В своем коде я пытаюсь сравнить полученный результат (строку) в Core Data с новой строкой, которую я пытаюсь сохранить.
Моя проблема в том, что я продолжаю получать 0, что приводит к сбою попытки сохранения каждый раз.
Как сравнить строку, которую я пытаюсь сохранить, со строкой, которая встречается в Core Data?
upperBody
в массив Set, а затем проверьте, существует ли первый набор в этом массиве. - person Joakim Danielson   schedule 01.04.2021SavedExerciseSets
, существующий в ваших CoreData,"Running Rowing Burpees"
? Я имею в виду со всеми заглавными буквами в начале каждого слова? - person Larme   schedule 04.04.2021upperBody
атрибутsortedComponents
, то есть отсортированный массив строк? Если это так, ваш код должен работать, иначе нет, потому что SQL не может разложить и отсортировать строковые атрибуты перед выборкой. - person Reinhard Männer   schedule 04.04.2021