【问题标题】:iOS NSPredicate not working?iOS NSPredicate 不起作用?
【发布时间】:2012-02-13 21:22:31
【问题描述】:

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

[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 个字符,即使两个应用使用相同的文件来查看表格。

为什么会这样?

【问题讨论】:

  • @co 感谢您立即发表评论。我已经更新了我的问题。请检查一下。
  • 您应该尝试在totalSentences 中找到应该与您的谓词匹配的特定NSString。然后,尝试使用NSPredicate 的实例方法evaluateWithObject: 对那个字符串使用谓词。如果评估结果为假,请仔细查看谓词和实际字符串,并可能也将它们发布在这里。
  • @yuji 问题是 totalSentences 从来没有填满任何东西。我会检查 evaluateWithObject。
  • 我的意思是firstLangEx。从那里找到应该匹配的实际字符串。
  • @yuji 我确实测试过。它适用于原始应用程序,但不适用于其他应用程序,即使两个应用程序都有表格视图和 firstLangEx 具有相同的内容。

标签: ios nspredicate didselectrowatindexpath


【解决方案1】:

由于我的问题没有答案,我会在找到解决方案后回答。如果虞姬因为他的贡献而获得奖励,那就太好了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多