【问题标题】:NSPredicate in NSArray, contains number with "/"NSArray 中的 NSPredicate,包含带有“/”的数字
【发布时间】:2014-08-18 12:27:33
【问题描述】:

我想用 Facebook 用户的生日日期过滤NSMutableArray。 我可以使用NSPredicate 吗?我的“结果”的 NSLog 是:

"birthday": "05/24/1993", 
  "id": "xxxxxxxxxxx""

我只想要“05/24/1993 获取生日日期并将其保存在 NSArray: 生日。

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    FBRequest *friendRequest = [FBRequest requestForGraphPath:@"/me?fields=birthday"];
    [ friendRequest startWithCompletionHandler:^(FBRequestConnection *connection,id result, NSError *error) {
        [[NSUserDefaults standardUserDefaults]setObject:result forKey:@"birthdayDate"];
        self.birthdayArray=[[NSUserDefaults standardUserDefaults]objectForKey:@"birthdayDate"];

        NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] '/'"];
        self.birthday = [self.birthdayArray filteredArrayUsingPredicate:aPredicate];

        NSLog(@"BIRTHDAY : %@", self.birthday);

    }

我的 NSArray 生日的 NSLog 是 ERROR :

-[__NSCFDictionary filteredArrayUsingPredicate:]: unrecognized selector sent to instance 0x10f80a570

【问题讨论】:

  • 从错误中很明显,result 对象是NSDictionary 而不是NSArray
  • 检查结果是否为NSDictionary?

标签: ios nsmutablearray nsarray nspredicate nsnumber


【解决方案1】:

您的结果是 NSDictionary 实例,而不是 NSArray 实例。这就是您收到错误消息的原因,因为 NSDictionary 不支持 filteredArrayUsingPredicate 消息。

你可以得到一个 NSArray 包含来自 NSDictionary 的所有键:

NSArray *keys = [result allKeys];

像你一样过滤数组:

NSArray *filteredKeys = [keys filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[c] 'b'"]];

然后使用filteredKeys 从字典中提取所需的值:

for (NSString *key in filteredKeys) { // Assuming that the dictionary keys are string
    id value = [result objectForKey:key];
    NSLog(@"Current value for key %@ = %@", key, value);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多