【问题标题】:Swift Core Data NSPredicate static string issueSwift Core Data NSPredicate 静态字符串问题
【发布时间】:2019-03-27 20:38:07
【问题描述】:

我想让谓词更灵活地进行更改。我在源代码中有很多这样的字符串:

let predicate = NSPredicate(format: "bodyPart.name = %@", name)

let filteredExercises = ExerciseEntity.mr_findAll(with: predicate)

但是正如你所见,我是否会将 BodyPart 名称更改为 MuscleGroup,例如有一天它会导致以下问题:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath bodyPart.name not found in entity <NSSQLEntity ExerciseEntity id=5>'

我正在寻找具有关键路径的解决方案,例如

let predicate = NSPredicate(format: "%@ = %@", \BodyPart.name, name)

【问题讨论】:

标签: ios swift core-data nspredicate


【解决方案1】:

使用 %K 替换密钥路径

let predicate = NSPredicate(format: "%K = %@", #keyPath(BodyPart.name), name)

【讨论】:

  • 应该是#keyPath(BodyPart.name),比较stackoverflow.com/a/41638253/1187415
  • 它只会返回“name == some name”,但我需要“bodyPart.name”,当然我可以组合成字符串)谢谢好的解决方案!
  • @MatrosovAlexander:您可以构建任意键路径,例如#keyPath(ExerciseEntity.bodyPart.name) 如果那是你要找的。​​span>
  • 我猜bodypart和bodypart是有区别的,一个是实体,另一个是关系?
  • @MatrosovAlexander,不应该像上面的 Martin R 建议的#keyPath(ExerciseEntity.muscle.name)吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多