我可以使用NSPredicate吗?

时间:2013-01-04 05:22:42

标签: objective-c ios

这是我的循环:

- (NSArray *)myArray
{
    if (!_myArray)
    {
        NSMutableArray *array = [NSMutableArray array];

        for (MyReport *report in self.helper.myReportType.reports)
        {
            [array addObject:report.nameString];
        }        
        _myArray = array;
    }

    return _myArray;
}

这是有效的(显然有些投射可能不太好或不可取),但肯定有更好的方法来做到这一点。 NSPredicate可以帮忙吗? (我仍然不习惯使用NSPredicate,但我认为它主要用于过滤数据,而不是构建这样的数组?)否则,我如何使用另一个Apple助手类重写它?

2 个答案:

答案 0 :(得分:2)

NSPredicate更多的是关于过滤数据,就像你说的那样。干净的方法是使用键值编码,在NSArray上使用时,会在每个对象上调用valueForKey:方法,并将结果作为NSArray返回:< / p>

_myArray = [self.helper.myReportType.reports valueForKey:@"nameString"];

请注意,此方法会自动将nil转换为NSNull。可以在此处找到更高级的KVC-Collection操作员信息:http://nshipster.com/kvc-collection-operators/

答案 1 :(得分:1)

使用以下代码 -

[self.helper.myReportType.reports valueForKey:@"nameString"];

它将从reports数组中返回nameString的数组。