Подстановка переменных с помощью FetchRequests, хранящихся в модели CoreData - PullRequest
8 голосов
/ 24 мая 2010

Я всегда создавал свои NSFetchRequests полностью в коде. Теперь я смотрю на графический интерфейс Xcode для создания запроса на выборку и сохранения его в модели.

Я следую примеру из документации XCode. Я добавил запрос на выборку в свою модель, и предикат, созданный с помощью графического интерфейса моделирования:

 firstName LIKE[c] "*SUBSTRING*"

Затем я получаю запрос с двумя строками:

NSDictionary *substituionDictionary = [NSDictionary dictionaryWithObject:@"woody" forKey:@"SUBSTRING"];

NSFetchRequest *fetchRequest = [mom fetchRequestFromTemplateWithName:@"firstNameContains" substitutionVariables:substituionDictionary];

NSLog результирующего NSFetchRequest выводит это:

(entity: Customer; predicate: (firstName LIKE[c] "*SUBSTRING*"); sortDescriptors: (null); limit: 0)

.., который указывает, что переменная не заменяется до возврата сохраненного FetchRequest.

Итак, как можно указать, что текст, введенный в GUI Predicate Builder для запросов на моделирование данных Xcode, предназначен для замены во время выполнения NSFetchRequest: fetchRequestFromTemplateWithName: substitutionVariables:?

Спасибо!

Древесный

Ответы [ 2 ]

6 голосов
/ 24 мая 2010

Необходимо щелкнуть правой кнопкой мыши строку редактора предикатов запроса на выборку, содержащую предполагаемую переменную, и выбрать «VARIABLE» во всплывающем окне. Когда вы щелкаете правой кнопкой мыши, в редакторе Xcode иногда придирчиво, поэтому я стараюсь нажимать только слева от кнопок +/-.

0 голосов
/ 09 апреля 2019

Вот пример подстановки переменных.

Сначала создайте шаблон fetchRequest в разделе запросов Fetch.

enter image description here

Затем напишите код для извлечения сотрудника по имени firstName.

   func employeeByFirstName(fName: String) -> [Employee]{

    let viewContext = self.persistentContainer.viewContext

    var substitutionVariables: [String: Any] = [String : Any]()
    substitutionVariables["FIRSTNAME"] = fName
    let fetchRequest = fetchRequestBy(name: "fetchByFirstName", variables: substitutionVariables) as! NSFetchRequest<Employee>

    do {
        let objects = try viewContext.fetch(fetchRequest)
        return objects
    } catch  {
        let nserror = error as NSError
        fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
    }
}


   func fetchRequestBy(name: String, variables: [String : Any]) -> NSFetchRequest<NSFetchRequestResult>? {
      let model = self.persistentContainer.managedObjectModel
      let fetchRequest = model.fetchRequestFromTemplate(withName: name, substitutionVariables: variables)
      return fetchRequest
   }
...