First get the posts in a separate Array:
NSArray *posts = [myData valueForKey:"posts"];
Or, if myData is an Array:
NSArray posts = [myData objectAtIndex:indexOfPosts];
//IndexOfPosts is an Integer containing, unsurprisingly, the index os the Posts-Subarray
Declare the Dictionary and Arrays to hold the results:
NSMutableDictionary *results = [[NSMutableDictionary alloc] init];
NSMutableArray *unicorns = [NSMutableArray array];
NSMutableArray *awesome = [NSMutableArray array];
Then loop and sort:
for(NSDictionary *post in posts){
if([[post valueForKey:"category"] valueForKey:"name"] isEqualToString:"unicorns"]){
[unicorns addObject:post];
}else if([[post valueForKey:"category"] valueForKey:"name"] isEqualToString:"awesome"]){
[awesome addObject:post];
}
}
Then add The Arrays to the Dictionary:
[result setObject:awesome forKey:"awesome"];
[result setObject:unicorns forKey:"unicorns"];
That should do it.
EDIT: Same procedure with dynamic categories:
NSMutableDictionary *result;
for(NSDictionary *post in posts){
NSString name = [[post objectForKey:"category"] objectForKey:"name"];
if([result objectForKey:name]){
[[result objectForKey:name] addObject:post];
}else{
NSMutableArray *array = [NSMutableArray arrayWithObject:post];
[result setObject:array forKey:name];
}
}