Как получить результат фильтрации данных в core data swift 5 с обработчиком завершения - PullRequest
0 голосов
/ 07 мая 2019

Я создал метод выборки данных с обработчиком завершения и передал текст поиска двух параметров и fetchOfSet, но я не получил ответ. Я также должен отсортировать записи и отфильтровать записи в порядке убывания.

func fetchAllExpenses(searchText:String, page_no:Int,completionHandler: @escaping (_ responseHandler:[Expense]) -> Void, errorHandler: @escaping (_ error: Error) -> Void) {

    var array = [Expense]()


    // filter the id descending order
    let idDescriptor: NSSortDescriptor = NSSortDescriptor(key: "exp_id", ascending: false)

    // set the fetch limt data
    fetchRequest.fetchLimit = 5

    // sort the data by descending order
    fetchRequest.sortDescriptors = [idDescriptor]

    // need to update every time because can not predicate how many rows before fetched
    fetchRequest.fetchOffset = page_no

    do{
        if let fetchResult = try context.fetch(fetchRequest) as? [Expense]{

            for i in 0..<fetchResult.count {
                let expenses: Expense? = fetchResult[i]
                array.append(expenses!)
                completionHandler(array)
            }

            DispatchQueue.main.async {


            }
        }else{
            print("Not Found More Data")
        }
    } catch let error {
        errorHandler("Error whilve retrieving data..\(error.localizedDescription)" as! Error)
    }
}

1 Ответ

0 голосов
/ 07 мая 2019

Прежде всего, выборка Core Data происходит синхронно.Нет необходимости в обработчике завершения.

В основном запрос на выборку отсутствует.И вместо возврата ошибки или необязательной передачи ошибки вызывающей стороне.Если записи не найдены, массив пуст.А параметр searchText вообще не используется.

func fetchAllExpenses(pageNo: Int) throws -> [Expense] {

    let fetchRequest : NSFetchRequest<Expense> = Expense.fetchRequest()

    // filter the id descending order
    let idDescriptor = NSSortDescriptor(key: "exp_id", ascending: false)

    // set the fetch limt data
    fetchRequest.fetchLimit = 5

    // sort the data by descending order
    fetchRequest.sortDescriptors = [idDescriptor]

    // need to update every time because can not predicate how many rows before fetched
    fetchRequest.fetchOffset = pageNo

    return try context.fetch(fetchRequest)
}
...