如何重组对象数组
How to restructure array of objects
我在 parse.com 上从我的后端查询一个名为消息的 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}"
)
parse 返回的 PFObject 非常像字典,因为它响应 allKeys
和 objectForKey:
和 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]];
}
}
}];
我在 parse.com 上从我的后端查询一个名为消息的 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}"
)
parse 返回的 PFObject 非常像字典,因为它响应 allKeys
和 objectForKey:
和 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]];
}
}
}];