NSPredicate 返回空数组

Posted

技术标签:

【中文标题】NSPredicate 返回空数组【英文标题】:NSPredicate returning empty array 【发布时间】:2015-01-07 15:32:12 【问题描述】:

我正在尝试过滤“频道”数组以仅查找类型属性为“Twitter”的频道。但是,我尝试使用 NSPredicate 过滤数组时返回一个空数组。这是我的代码:

NSMutableDictionary *officials = [decodedData valueForKey:@"officials"];
NSMutableArray *channels = [officials valueForKey:@"channels"];
NSLog(@"%@", channels);


NSPredicate *twitterPredicate = [NSPredicate predicateWithFormat:@"type = 'Twitter'"];
NSLog(@"%@", [channels filteredArrayUsingPredicate:twitterPredicate]);

这是我应用谓词前后的返回:

之前:

 (
    (
            
        id = SenatorFeinstein;
        type = Facebook;
    ,
            
        id = SenFeinstein;
        type = Twitter;
    ,
            
        id = SenatorFeinstein;
        type = YouTube;
    
),
    (
            
        id = senatorboxer;
        type = Facebook;
    ,
            
        id = SenatorBoxer;
        type = Twitter;
    ,
            
        id = SenatorBoxer;
        type = YouTube;
    
),

)

之后:

2015-01-07 10:19:31.760 voices[537:66850] ()

我的谓词过滤器有问题吗?我正在使用适用于 ios 的 Google Civic API。任何建议表示赞赏

【问题讨论】:

问题是你的通道数组中有两个数组。 看起来你有一个包含两个数组的数组,每个数组包含三个字典。您的谓词可能仅过滤顶部数组而未找到任何匹配项,因为它正在过滤的元素(数组)不提供该键。您需要更改逻辑以过滤子数组。 【参考方案1】:

试试这个,它会从通道数组中的数组中获取所有的字典:

NSMutableDictionary *officials =[decodedData valueForKey:@"officials"];
NSMutableArray *channels = [officials valueForKey:@"channels"];
NSLog(@"%@", channels);

NSMutableArray *onlyChannels = [[NSMutableArray alloc] init];
for (NSArray *array in channels)

    for (NSDictionary  *dict in array)
    
        [onlyChannels addObject:dict];
    



NSPredicate *twitterPredicate = [NSPredicate predicateWithFormat:@"type = 'Twitter'"];
NSLog(@"%@", [onlyChannels filteredArrayUsingPredicate:twitterPredicate]);

【讨论】:

以上是关于NSPredicate 返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

日期的核心数据 NSPredicate

创建一个带有换行符的 NSPredicate 作为字符串的一部分

过滤自定义对象的 NSMutable 数组

NSFetchedResultsController 中的 NSPredicate 不使用 Category 的 getter

Objective-c NSPredicate - 按不同 NSManagedObjectContext 中的 ObjectId 过滤

使用 NSPredicate 遍历多个 Core Data 对象