如何重构NSDictionaries的对象

在我的debugging器中,这是我的日志语句如何打印我的消息对象:

self.messages = ( "<lean: 0x7fcf98665140, objectId: vglE1UJ5KI, localId: (null)> {\n messageBody = Jj;\n recipientId = XvvxETqjph;\n senderId = XvvxETqjph;\n timestamp = \"1424991590106.210938\";\n}", "<lean: 0x7fcf98667940, objectId: rgBFYBMKlU, localId: (null)> {\n messageBody = \"test 3 from ian\";\n recipientId = XvvxETqjph;\n senderId = Hoy7UjLzOh;\n timestamp = \"1424631667110.638184\";\n}", "<lean: 0x7fcf98667f30, objectId: hB5uhwsYsu, localId: (null)> {\n messageBody = \"test 2 from user1\";\n recipientId = XvvxETqjph;\n senderId = VQzxWbDnal;\n timestamp = \"1424630904935.162109\";\n}", "<lean: 0x7fcf986685b0, objectId: dOe2B9oq5b, localId: (null)> {\n messageBody = \"test 1\";\n recipientId = XvvxETqjph;\n senderId = XvvxETqjph;\n timestamp = \"1424630808309.478027\";\n}" ) 
  1. 这究竟是什么? 它看起来像一个字典的对象,但objectId和localIdvariables超出花括号,所以我不知道。

  2. 我如何重组这个以便我可以自己拥有每个单独的字典?

我从parse.com上的后端获取这些数据:

 -(void)viewWillAppear:(BOOL)animated{ NSString *userId = [[PFUser currentUser] objectId]; PFQuery *query = [PFQuery queryWithClassName:@"lean"]; [query whereKey:@"recipientId" equalTo:userId]; [query orderByDescending:@"createdAt"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (error) { NSLog(@"Error: %@ %@", error, [error userInfo]); } else { // We found messages! masterMessages = (NSDictionary *)objects; NSLog(@"self.messages = %@", masterMessages); [self.tableView reloadData]; } }]; } 

在这里输入图像说明

这是一个简单的NSArray ,它包含名为lean的types的对象。 您可以通过索引获取所需的对象

更新:

我当然不能确定。 我不知道lean的结构。 但很可能它包含名为messageBody字段(我认为它必须是一个属性)。 如果真的如此,那么你可以做到以下几点:

 NSMutableArray* messagesBySenderName = [NSMutableArray new]; for (id lean in objects) { NSDictionary *messageBody = [lean valueForKeyPath:@"messageBody"]; if ([lean[@"senderId"] isEqualToString:@"Hoy7UjLzOh"]) { [messagesBySenderName addObject:messageBody]; } } 

再次 – 这只是一个假设。 在任何情况下,我都不能保证它能正常工作

它们是PFObject (来自parse.com框架),PFObject以这种特殊的方式实现了description 。 PFObjects实现了一个类似字典的界面, 在这里完整描述 。

在尊重他人的情况下,将其input为id并使用KVO访问其属性已经过于普遍了。 此外, messageBody似乎是一个stringtypes的列。 作为字典对待将是徒劳无功的。

PFObjects应该这样处理:

 for (PFObject *pfObject in objects) { NSString *objectId = [pfObject objectId]; NSDate *createdAt = [pfObject createdAt]; NSString *messageBody = [pfObject objectForKey:@"messageBody"]; NSString *senderId = [pfObject objectForKey:@"senderId"]; // and so on NSLog(@"This object has id %@ created at %@, senderId %@", objectId, createdAt, senderId); } 

我知道你最近的另一个问题如何从这个数组派生senderIds数组。 从这段代码中提取senderId应该是显而易见的,但是(a)你可能不需要一个基于你的UI需求的新数组(一个对话表),和(b)我想你实际上是在寻找senderName,这可能意味着您已经实现了parsing对象之间的关系的实质性改变。

我会试着再回答这个问题,但是这个问题显然是相关的。