NSComparisonResult行为不端

时间:2015-01-29 01:10:37

标签: ios objective-c cocoa-touch

我的应用程序正在比较发送到函数的请求字符串,例如-(void)sendSearchRequest:(NSString *)request sport:(NSString *)sport location:(NSString *)location。我将请求设置为'Kevin',将运动设置为'棒球',并将位置设置为'Wellston'。

然后,我将它与一个对象进行比较,该对象的请求是'Kevin',sp ort是'Basketball',位置是'Wellston'。这项运动应该是假的,但事实并非如此。怎么回事?

   for (Athlete *athlete in self.athletes) {


    NSComparisonResult result = [[athlete name] compare:request options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [request length])];
      NSComparisonResult sportCompare = [[athlete sport] compare:sport options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [sport length])];
    NSComparisonResult locationCompare = [location compare:self.cityName options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [self.cityName length])];

    NSLog(@"Location: %@", location);
    NSLog(@"Name: %@", request);
    NSLog(@"Sport: %@", sport);
    if (result == NSOrderedSame && sportCompare == NSOrderedSame && locationCompare == NSOrderedSame) {



        [self.filteredArray addObject:athlete];
                  }
}

备注:
*我必须考虑用户错误。这些变量是从UITextField传递的,所以如果用户输入'Wellston,OK'但对象的城市是'Wellston',它将不起作用

1 个答案:

答案 0 :(得分:2)

如果您想知道两个字符串是否相同,为什么使用NSComparisonResult?这毫无意义。它用于排序。只需使用isEqualToString: - 这就是它的用途。

或者对于更复杂的相等概念,您可以实现锚定子字符串搜索。你可以使用不区分大小写和变音符号不敏感。因此,您可以确定一个字符串是否以另一个字符串开头,例如。