NSPredicate在阵列级别使用实例计数器进行过滤

时间:2013-10-30 19:39:21

标签: objective-c arrays json instance

在我的iOS应用程序中,我拉入JSON,并将其设置为数组。该数组如下所示:

links =         {

            "link_1" =             {

                clicks = 1;

                ip = "10.0.0.0";

                shorturl = "http://on.example.com/abc";

                timestamp = "2013-10-30 05:56:51";

                title = Example Website;

                url = "http://example.com/page/1/path/";

            };

            "link_2" =             {

                clicks = 10;

                ip = "10.0.0.0";

                shorturl = "http://on.example.com/def";

                timestamp = "2013-10-16 16:55:47";

                title = "Fitbit Force Is the Smartest Fitness Tracker Yet [REVIEW]";

                url = "http://mashable.com/2013/10/16/fitbit-force-review/";

            };

我设置了以下方法来过滤UITableView结果:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@"links.link_1.title contains[cd] %@",
                                    searchText];

    searchResults = [filterArray filteredArrayUsingPredicate:resultPredicate];

}

我需要更新predicateWithFormat过滤器以考虑link_1link_2link_3...

问题:如何让过滤器匹配我的数组的任何“级别”,其中link_之后的字符串始终为正数,但可以是无穷多个数字?

我基本上需要在link_级别搜索每个正数的数组。

1 个答案:

答案 0 :(得分:1)

它不是数组,links是字典。因此,只需使用格式为links.allValues的谓词过滤@"title contains[cd] %@"

==编辑==

如果我理解正确,您需要过滤链接对象:

NSArray *linksArray = [[filterArray[0] objectForKey:@"links"] allValues];
NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"title contains[cd] %@", searchText];
NSArray *filteredLinks = [linksArray filteredArrayUsingPredicate:resultPredicate];

然后以您需要的形式形成searchResults,也许只是传递filteredLinks