过滤自定义对象的 NSMutable 数组

Posted

技术标签:

【中文标题】过滤自定义对象的 NSMutable 数组【英文标题】:Filtering NSMutable Array of custom objects 【发布时间】:2012-09-22 22:55:19 【问题描述】:

我有一个包含 Episode 类型的自定义对象的 NSMutableArray。这些对象中的每一个都有多个 NSStrings 作为属性。现在我想过滤数组以检查我是否已经有这个情节(从 XML 解析)并更新它或创建一个新的情节对象。

我使用以下代码:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"weblink = %@", currentEpisode.weblink];

NSArray* hits = [appDelegate.episodesList filteredArrayUsingPredicate:predicate];

currentEpisode 是我从 XML 中解析出来的剧集,我想检查一下,episodeList 是我的带有 Episode 对象的 NSMutableArray。 weblink 是包含 URL 的 NSString 属性之一。

当我检查网络链接时,一切正常。但是 Podcastfeeds 中的 URL 可以更改,因此我想检查另一个名为 kuhid 的属性,它是提要中提供的唯一标识符。 'kuhid' 也是一个 NSString(例如:644ED540-EDCA-4D4F-882E-4B3106DDAAB3)。当我检查“kuhid”时,谓词永远不会匹配,我得到重复。 这两个属性都是 NSStrings,都正确合成。如果我尝试我的其他 NSString(例如标题)属性之一,则相同。

有人知道为什么这仅适用于网络链接而不适用于我的任何其他属性吗?

【问题讨论】:

您确定您的字符串完全匹配,即您没有前导或尾随空格,或小写与大写,或使用不同的破折号(长破折号与短破折号例如破折号)或不可见的字符?尝试记录两个字符串的 NSData 表示,以便在调试器中逐字节比较它们以确保确定。 啊,非常感谢。我以为我消除了所有空格,但我是在创建谓词之后才这样做的,而不是之前。谢谢,有时我看不到最明显的东西。 我知道那种感觉 ;) 我会把它作为一个答案,这样你就可以通过勾选这个问题而不是让它在 SO 上保持打开状态来将此问题标记为已解决 【参考方案1】:

您确定您的字符串完全匹配,即您没有前导或尾随空格,或小写与大写,或使用不同的破折号(例如长破折号与短破折号)或不可见字符?

尝试记录两个字符串的 NSData 表示,以便在调试器中逐字节比较它们以确保

【讨论】:

以上是关于过滤自定义对象的 NSMutable 数组的主要内容,如果未能解决你的问题,请参考以下文章

对象数组的Angular2材质自动完成自定义过滤器

使用 NSPredicate 搜索/过滤自定义类数组

包含另一个自定义对象数组的自定义对象数组上的 NSPredicate

Quickblox 自定义对象数组的 NSPredicate

AngularJS 自定义过滤功能

使用自定义(对象)适配器过滤 ListView