NSPredicate与数组不起作用

马里乌斯·范努(Marius Fanu)

我试图弄清楚为什么这段代码没有显示相同的结果,以及为什么两个字符串不相等。正如您在日志中看到的那样,我插入UITextfield的值是“ a”。

- (void)resultsForSearchString:(NSString *)searchString
{   
    NSString *str = [NSString stringWithFormat:@"a"];

    NSLog(@"searchString = %@", searchString);
    NSLog(@"str = %@", str);

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa", nil];

    NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", searchString];
    NSArray *beginWithA = [array filteredArrayUsingPredicate:aPredicate];
    NSLog(@"%@", beginWithA);

    aPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", str];
    beginWithA = [array filteredArrayUsingPredicate:aPredicate];
    NSLog(@"%@", beginWithA);

    if ([str isEqualToString:searchString]) {
        NSLog(@"true");
    }
    else {
        NSLog(@"false");
    }
}

像下面这样调用此方法作为UIControlEventEditingChanged的触发器:

- (void)textFieldDidChange:(UITextField *)sender
{
    [self resultsForSearchString:sender.text];
}

这是输出:

2013-12-17 16:44:49.845 SevenOut[7381:70b] searchString = ​a 
2013-12-17 16:44:49.846 SevenOut[7381:70b] str = a
2013-12-17 16:44:52.676 SevenOut[7381:70b] (
)
2013-12-17 16:44:53.956 SevenOut[7381:70b] (
    Adam
)
2013-12-17 16:44:54.988 SevenOut[7381:70b] false
盖·古格斯(Guy Kogus)

我刚刚测试了您的代码,效果很好。

2013-12-17 15:02:45.778 MessAbout[3856:70b] searchString = a | length = 1
2013-12-17 15:02:45.779 MessAbout[3856:70b] str = a | length = 1
2013-12-17 15:02:45.779 MessAbout[3856:70b] (
    Adam
)
2013-12-17 15:02:45.779 MessAbout[3856:70b] (
    Adam
)
2013-12-17 15:02:45.780 MessAbout[3856:70b] true

如果您将前两个日志更改为

NSLog(@"searchString = %@ | length = %u", searchString, [searchString length]);
NSLog(@"str = %@ | length = %u", str, [str length]);

然后,您可能会明白为什么它们不是相同的字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章