我正在使用Core Data存储由多个实体组成的对象模型,但相关的是:
实体: 拉伸
相关属性:
equipmentUsed,
muscleGroup
我在故事板中有一个带有UISegmentedControl
的场景,我用它来选择equipmentUsed
。
// Creates a variable which changes the selectedEquipment type based on which
// selectedSegmentIndex is clicked
var stretches: [Stretch] = [] // List of stretches
var selectedEquipment : NSString? // Equipment selected from UISegmentedControl
@IBAction func selectEquipment(sender: UISegmentedControl) {
if equipmentSelector.selectedSegmentIndex == 0 {
self.selectedEquipment = "roller"
}
if equipmentSelector.selectedSegmentIndex == 1 {
self.selectedEquipment = "none"
}
}
在UISegmentedControl
下方,我使用静态细胞来切换各种肌肉群。使用谓词进行过滤的每个示例都会转储TableView上的所有数据,然后进行过滤。我正在尝试为谓词选择关键路径并将它们放在一个数组中。
我正在尝试创建选择特定设备(例如:无或泡沫滚轴)和特定肌肉群的谓词。我使用前面的selectedEquipment
字符串作为下面谓词中的变量:
var shoulderPredicate = NSPredicate(format: "stretch.equipmentUsed contains[c] $selectedEquipment AND (stretch.muscleGroup contains[c] %@", "shoulders")
我在使用shoulderPredicate创建数组时遇到了麻烦。这是我创建数组的代码:
@IBAction func testSearchStretches(sender: AnyObject) {
println("testSearchStretches clicked")
var stretchList = (stretches as NSArray).filteredArrayUsingPredicate(shouldersPredicate)
for stretch in stretchList {
println(stretch)
}
}
我可以看到testSearchStretches IBAction在控制台中打印出“testStretches clicked”,但它不会打印stretchList,但我知道有一个与谓词匹配的Stretch。我相信我设置的谓词不区分大小写,所以我认为这不是问题所在。
一旦我弄清楚阵列,我将在另一个屏幕上显示结果。现在,我只是想让谓词工作来创建stretchList数组。我是编程的新手,我正试图超越教程来自己创建一些东西。如果你来到这里,感谢阅读,我非常感谢你的帮助。
答案 0 :(得分:1)
谓词有两个问题:
$selectedEquipment
不插入或插入
selectedEquipment
变量的值。可以使用谓词中的$VAR
使用predicateWithSubstitutionVariables()
函数,但我认为是
不是你想要的。您的谓词应该是
NSPredicate(format: "equipmentUsed contains[c] %@ AND muscleGroup contains[c] %@",
selectedEquipment, "shoulders")
假设“equipmentUsed”和“muscleGroup”是 String 属性。