【问题标题】:How to restructure array of objects [duplicate]如何重组对象数组[重复]
【发布时间】:2015-03-16 21:05:23
【问题描述】:

我正在 parse.com 上的后端查询一个名为 messages 的 NSArray 类型的对象,如下所示:

 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}"
)

所以它基本上是一个字典对象数组。如何将其重新格式化为正常的字典数组,如下所示:

self.messages = (
"{\n objectId: vglE1UJ5KI;\n    messageBody = Jj;\n    recipientId = XvvxETqjph;\n    senderId = XvvxETqjph;\n    timestamp = \"1424991590106.210938\";\n}",
"{\n objectId: rgBFYBMKlU;\n    messageBody = \"test 3 from ian\";\n    recipientId = XvvxETqjph;\n    senderId = Hoy7UjLzOh;\n    timestamp = \"1424631667110.638184\";\n}",
"{\n objectId: hB5uhwsYsu;\n    messageBody = \"test 2 from user1\";\n    recipientId = XvvxETqjph;\n    senderId = VQzxWbDnal;\n    timestamp = \"1424630904935.162109\";\n}",
"{\n objectId: dOe2B9oq5b;\n    messageBody = \"test 1\";\n    recipientId = XvvxETqjph;\n    senderId = XvvxETqjph;\n    timestamp = \"1424630808309.478027\";\n}"
)

【问题讨论】:

  • 在这个话题上我们会成为老朋友(:-))。我想我在这里stackoverflow.com/questions/29053822/… 正确地回答了这个问题的一个形式,并且有点惊讶你没有那样看。也许是因为关于这个话题的不确定性仍然存在。希望我下面的回答能更好地解释。
  • 不,它不是“基本上是字典对象的数组”。它是一个 PFObject 数组,其中 PFObject 是一个自定义对象,它实现了一些类似字典的方法,并且有一个描述方法,可以输出类似于字典的信息。当您记录一个对象并使用“%@”格式说明符显示它时,它会调用该对象的description 方法,这就是您所看到的。 description 方法的输出可能反映也可能不反映被描述对象的内部结构。

标签: ios objective-c arrays parse-platform nsdictionary


【解决方案1】:

从 parse 返回的 PFObject 非常像一个字典,只要它响应 allKeysobjectForKey:setObject:forKey: 等等。我看到几个关于 SO 的提问者对 PFObject 实现 description 的方式以及它在控制台上的打印方式感到困惑,这使它看起来不像字典,而不是它可能应该的样子。

无论如何,如果出于某种原因,真的必须有一个 NSDictionaries 的 NSArray,而不是类似字典对象的 NSArray,那么他们可以使用这样的代码:

- (NSDictionary *)dictionaryFromPFObject:(PFObject *)pfObject {
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    for (NSString *key in [pfObject allKeys]) {
        dictionary[key] = [pfObject objectForKey:key];
    }
    return dictionary;
}

...并从这样的查找完成块中调用它:

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        NSMutableArray *array = [NSMutableArray array];
        for (PFObject *pfObject in objects) {
            [array addObject:[self dictionaryFromPFObject:pfObject]];
        }
    }
}];

【讨论】:

  • 谢谢丹。在我去 aws 之前,我实际上只是使用 parse.com 进行原型设计,我真的不想弄乱 parse 但我会采用这种方法
猜你喜欢
  • 2021-10-20
  • 2020-03-28
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多