我有一个包含 3 个部分的表格。我还有一系列字典,用于命名我的单元格等。我想根据最喜欢的键用字典中的项目填充我的第二部分。
这是我的字典的样子:
<array>
<dict>
<key>favorite</key>
<string>NO</string>
<key>title</key>
<string>accessories.sku</string>
<key>checkedState</key>
<string>NO</string>
</dict>
<dict>
<key>favorite</key>
<string>YES</string>
<key>title</key>
<string>accessoriesImage</string>
<key>checkedState</key>
<string>NO</string>
</dict>
我以前已经遍历了这本字典的其他事情,我知道我需要再次这样做,但我无法完全掌握这种情况。
static NSString *kTitleKey = @"title";
static NSString *kCheckedState = @"checkedState";
static NSString *kFavorite = @"favorite";
for (id dict in myArray]) {
if ([dict[kFavorite] isEqualToString:@"YES"]) {
cell.textLabel.text = [myArray objectAtIndex:[indexPath row] valueForKey:kTitleKey];
}
}
但是当然cell.textLabel.text = [myArray objectAtIndex:[indexPath row] valueForKey:kTitleKey] 是不正确的。
你已经匹配了你的dictionary[kFavorite]
那么为什么要从myArray
中获取它。 你可以像这样编写循环代码,
for (id dict in myArray]) {
if ([dict[kFavorite] isEqualToString:@"YES"]) {
cell.textLabel.text = dict[kTitleKey];
}
}
您可以使用 NSPredicate 过滤数组,然后使用过滤后的数组驱动第二部分:
static NSString *kTitleKey = @"title";
static NSString *kCheckedState = @"checkedState";
static NSString *kFavorite = @"favorite";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ CONTAINS[c] %@", kFavorite, @"YES"];
NSArray *filteredArray = [myArray filteredArrayUsingPredicate:predicate];