У меня есть NSMutableArray, созданный из объекта источника данных
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
[self setAmountArray: mutableFetchResults];
каждый объект в моем изменяемом массиве имеет две переменные экземпляра name
и timeadded
.
теперь я хочу отобразить все имена в uitableview, сгруппированные по дням их добавления. для этого я написал следующий метод
-(NSMutableArray*)arrangeTransfersByDate:(NSMutableArray*)transferArray {
// Setting up objects for this method
NSDate *oldDate = [NSDate dateWithTimeIntervalSince1970:0.0f];
NSDateFormatter *dateComparisonFormatter = [[NSDateFormatter alloc] init];
[dateComparisonFormatter setDateFormat:@"yyyy-MM-dd"];
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
for(transfers *transfer in transferArray) {
if( [[dateComparisonFormatter stringFromDate:[transfer timeadded]] isEqualToString:[dateComparisonFormatter stringFromDate:oldDate]] ) {
if([returnArray count] == 0) {
[returnArray addObject:[NSMutableArray arrayWithObject:transfer]];
} else {
[[returnArray objectAtIndex:[returnArray count]-1] addObject:transfer];
}
} else {
[returnArray addObject:[NSMutableArray arrayWithObject:transfer]];
oldDate = [transfer timeadded];
}
}
//[returnArray release];
[dateComparisonFormatter release];
return returnArray;
}
transferArray
- это мой amountArray
, где хранятся мои основные объекты данных.
так что это работает! но
есть ли лучший способ сделать это? Можете ли вы дать мне что-то вроде «лучшей практики» или просто посмотреть, есть ли утечки памяти?
спасибо!
редактирование:
правильный ответ был NSFetchedResultController
и его sectionNameKeyPath
.
однако я не хотел хранить свои данные дважды.
поэтому я создал следующий метод получения в моем NSManagedObject
.
- (NSString *) pubDate {
[self willAccessValueForKey:@"pubDate"];
NSDateFormatter *dateComparisonFormatter = [[NSDateFormatter alloc] init];
[dateComparisonFormatter setDateFormat:@"dd.MM.YYYY"];
NSString *temp = [dateComparisonFormatter stringFromDate:[self pubTime]];
[dateComparisonFormatter release];
[self didAccessValueForKey:@"pubDate"];
return temp;
}
с этим я могу отсортировать свой tableviewcontroller по дате, используя мой FetchedResultController и мой pubTime
, который является отметкой времени.
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[self managedObjectContext]
sectionNameKeyPath:@"pubDate"
cacheName:@"transfersRoot"];
спасибо всем