[<__NSCFDictionary 0x7fdf8a926250> valueForUndefinedKey:]:此 class 与键 HName 的键值编码不兼容

[<__NSCFDictionary 0x7fdf8a926250> valueForUndefinedKey:]: this class is not key value coding-compliant for the key HName

大家好我有一个字典数组,我想从中查找酒店名称但一直出现此错误

[<__NSCFDictionary 0x7fdf8a926250> valueForUndefinedKey:]: this class is not key value coding-compliant for the key 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";
}

尝试以下格式字符串:

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

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

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

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);