NSPredicate 调用关系

NSPredicate to call relationships

我目前以这种方式设置我的核心数据模型。

我目前也使用 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',要么是 returns 一个空数组。

这对我有用,试一试:

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 []
}

如果你想访问纬度,你首先需要检查 locations 是否为 nil:

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 []
}

此外,考虑将位置更改为位置,因为它是一对一的关系。