- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate
will be useful. Write a predicate to get the filtered array of all the elements matching the date of the first item in the array. Add that array to a new mutable array, which is the object holding all the filtered arrays with matching dates.
Record that date as having been used. Iterate over the original array until you find a different date and repeat the filteredArrayUsingPredicate operation. Keep doing this until you have covered all unique dates in the array.
I was going to suggest using NSSet to remove all the items that have been filtered already to reduce processing time but the number of items may be important, and depending on the objects NSSet could discard duplicates.
An optimisation could be to use NSSet to non-destructively create a set of unique dates from the original array and then iterate over that set, performing the filteredArrayUsingPredicate operation. But whether that is practical depends on your data.