[< __ NSCFDictionary 0x7fdf8a926250> valueForUndefinedKey:]:此类不是密钥HName的密钥值编码兼容

时间:2015-06-26 11:33:47

标签: ios objective-c nsdictionary

大家好我有一个字典数组,我希望找到一个酒店名称,但不断收到此错误

  

[< __ NSCFDictionary 0x7fdf8a926250> valueForUndefinedKey:]:这个类   密钥HName不符合密码值编码。

我的代码是:

searchHotelNameString = _txtHotelSearch.text;
_resultObjectsArray = [NSArray array];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"@HName like %@",
                                      searchHotelNameString];
_resultObjectsArray = [self.arrHotelResults filteredArrayUsingPredicate:predicate];

我的字典是:

{
    "@HIndex" = 5;
    "@HName" = "XYZ Plaza Hotel Dubai";
    "@Lattitude" = "25.2174";
}

1 个答案:

答案 0 :(得分:0)

尝试以下格式字符串:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF['@HName'] CONTAINS %@",
                              searchHotelNameString];

或者

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF['@HName'] LIKE %@",
                              [[@"*" stringByAppendingString:searchHotelNameString] stringByAppendingString:@"*"]];

如果您使用searchHotelNameString运营商,则必须向like添加通配符。

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html

修改

如果您不使用正则表达式,我建议您使用==而不是LIKE

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF['@HName'] == %@",
                              searchHotelNameString];

这是我的测试代码:

NSString *searchHotelNameString = @"Taj Palace";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF['@HName'] == %@",
                          searchHotelNameString];

NSArray *arrHotelResults = @[
                             @{@"@HIndex" : @5, @"@HName" : @"XYZ Plaza Hotel Dubai", @"@Lattitude" : @25.2174},
                             @{@"@HIndex" : @5, @"@HName" : @"Beijing", @"@Lattitude" : @25.2174},
                             @{@"@HIndex" : @5, @"@HName" : @"Xiamen", @"@Lattitude" : @25.2174},
                             @{@"@HIndex" : @5, @"@HName" : @"Wuhan", @"@Lattitude" : @25.2174},
                             @{@"@HIndex" : @5, @"@HName" : @"Taj Palace", @"@Lattitude" : @25.2174}
                             ];
NSArray *resultObjectsArray = [arrHotelResults filteredArrayUsingPredicate:predicate];
NSLog(@"%@", resultObjectsArray);