ios - 如何重构对象数组

标签 ios objective-c arrays parse-platform nsdictionary

<分区>

我正在 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}"
)

最佳答案

从解析返回的 PFObject 非常像字典,因为它响应 allKeysobjectForKey:setObject:forKey: , 等等。我见过几个提问者对 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;
}

...并从查找完成 block 中调用它,如下所示:

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

关于ios - 如何重构对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29086928/

上一篇:ios - 以编程方式添加 UICollectionViewLayout 问题

下一篇:ios - 使用后如何隐藏键盘

相关文章:

objective-c - iOS,AVPlayer - 循环播放 MP3 片段

javascript - 将 DOM 元素数组移动到页面中的占位符

objective-c - 在 textViewDidEndEditing 之外处理键盘上的 'Done' 按钮

iphone - 将人员组添加到 ABAddressBookRef,组添加正常,但人员未添加到组?

ios - 在应用程序启动时启动视频失败 iOS

iphone - 在符合协议(protocol)的类中重新声明/扩展 Objective-C 协议(protocol)中定义的 typedef

c - 循环读取数组输入意外行为?

java - 根据最后一个字母表按字典顺序对字符串数组进行排序 - 字符串索引超出范围 -1 异常

ios - 可以从 UISearchBar 中删除背景或边框吗?

ios - 无法创建 IOS 应用程序开发配置文件