我有一个简单的谓词函数,如下所示:
[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 字符串的字符串填充。
编辑:
我还以编程方式向 totalSentences 添加了一些字符串,可变数组运行良好。知道为什么会这样吗?
编辑:
我已经按照 yuji 的建议进行了测试:
BOOL ok;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", cellText];
ok = [predicate evaluateWithObject: firstLangEx];
NSLog (@"Bool ok %d", ok);
结果总是“Bool ok 0”。
cellText 是“Babylonian”,firstLangEx 中的一行确实包含:“[E: The way an Ancient Babylonian may write it.]”。
那么我做错了什么?
编辑:
我使用此代码
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellText = cell.textLabel.text;
在
- (void)tableView:(UITableView *)tableView1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath
为了从我的数组中提取字符串以匹配字符串。
但是,它永远不会匹配,因为
NSLog (@"cellText length %d", [cellText length]);
总是显示 cellText 总是有一个额外的字符,即使我的数组中没有空格或额外的字符来加载我的表格视图。例如,“Babylonian”是 10 个字符,日志在原始应用程序中显示了这个数量,但在另一个应用程序中显示了 11 个字符,即使两个应用程序使用相同的文件来查看表格。
为什么会这样?