NSPпредикат для установления отношений - PullRequest
0 голосов
/ 21 июня 2020

Сейчас моя основная модель данных настроена таким образом.

введите описание изображения здесь

В настоящее время я также использую fetchedResultController, я пробовал использовать NSPredicate для сравнения значений с переданной координатой. Я пробовал:

var location: Location!

func setUpFetchedResultsViewController() {
           let fetchRequest: NSFetchRequest<FlickrImage> = FlickrImage.fetchRequest()
           let sortDescriptor = NSSortDescriptor(key: "latitude", ascending: true)
        let predicate = NSPredicate(format: "locations.latitude == %@", location.latitude)
        fetchRequest.predicate = predicate
           fetchRequest.sortDescriptors = [sortDescriptor]
        fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: dataController.viewContext, sectionNameKeyPath: nil, cacheName: nil)
        
           
           fetchResultController.delegate = self
           do {
               try fetchResultController.performFetch()
           } catch {
               print(error.localizedDescription)
           }
       }

Еще пробовал:

 let predicate = NSPredicate(format: "locations == %@", location)

Либо я получаю сообщение об ошибке EXC_BAD_ACCESS, либо он возвращает пустой массив.

1 Ответ

1 голос
/ 21 июня 2020

Это работает для меня, попробуйте:

func setUpFetchedResultsViewController() {
    let request: NSFetchRequest<FlickrImage> = FlickrImage.fetchRequest()
    request.predicate = NSPredicate(format: "locations == %@", locations)
    request.sortDescriptors = [NSSortDescriptor(key: "latitude", ascending: true)]
    do {
        return try context.fetch(request)
    } catch {
        print("Error fetching data from context: \(error)")
    }
    return []
}

Если вы хотите получить доступ к широте, вам сначала нужно проверить, что местоположения не равны нулю:

func setUpFetchedResultsViewController() {
    let request: NSFetchRequest<FlickrImage> = FlickrImage.fetchRequest()
    request.predicate = NSPredicate(format: "locations != nil AND locations.latitude == %@", locations.latitude)
    request.sortDescriptors = [NSSortDescriptor(key: "latitude", ascending: true)]
    do {
        return try context.fetch(request)
    } catch {
        print("Error fetching data from context: \(error)")
    }
    return []
}

Также подумайте о смене местоположения на местоположение, поскольку это отношение к одному.

...