iOS NSPredicate不工作?

时间:2012-02-13 21:22:32

标签: ios nspredicate didselectrowatindexpath

我有一个简单的谓词函数,如下:

[totalSentences addObjectsFromArray:[firstLangEx filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF contains[c] %@)", cellText]]];

此行适用于我的某个应用,但是当我将其复制到另一个应用并尝试测试时,它不起作用。

totalSentences is a global NSMutableArray

firstLangEx is a local NSArray filled with several lines

cellText is  NSString *cellText = cell.textLabel.text;

所有这些代码都存在于我的原始应用和工作中。它们在方法- (void)tableView:(UITableView *)tableView1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath

中实现

即使cellText在另一个应用程序中匹配firstLangEx中的一个字符串,totalSentences也永远不会被任何字符填充。

是什么导致这种情况?


编辑:

在NSLog中

totalSentences总是显示没有内容,与原始应用程序中始终显示至少一行的输出相反。

firstLangEx总是从文本文件加载正确的内容(在两个应用程序中文件都相同)

cellText始终显示至少一个字符串。 (我在两个应用程序中测试相同的字符串。)

所以我不知道为什么totalSentences总是空的,当它应该至少填充一个匹配所有cellText字符串的字符串。


编辑:

我还以编程方式为totalSentence添加了一些字符串,并且可变数组运行良好。知道为什么会这样吗?


编辑:

我已经测试过yuji建议:

BOOL ok;

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", cellText];

ok = [predicate evaluateWithObject: firstLangEx];

NSLog (@"Bool ok %d", ok);

结果总是" Bool ok 0"。

cellText是"巴比伦"而且,来自firstLangEx的一行确实包含了这个:" [E:一个古老的巴比伦人可能写出它的方式。]"。

那我做错了什么?


编辑:

我使用此代码

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;

- (void)tableView:(UITableView *)tableView1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath

为了提取字符串以匹配我的数组中的字符串。

然而,它永远不会匹配,如

NSLog (@"cellText length %d", [cellText length]);

总是显示cellText总是有一个额外的字符,即使我的数组中没有空白或额外的字符来加载我的表视图。例如,"巴比伦"是10个字符,日志在原始应用程序中显示此数量,但它在另一个应用程序中显示11个字符,即使两个应用程序使用相同的文件到表视图。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

由于我的问题没有答案,我会回答,因为我找到了解决方案。如果yuji因他的贡献而获奖将会很好。

我通过将提供表视图的文件的内容复制到具有其他名称的新文件中来解决它,并且突然所有单元格的额外不可见字符消失了。这是常见问题吗?无论如何,它现在解决了,耶!感谢yuji。