我有一个从数据源对象创建的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;
}
通过这个,我可以使用我的fetchedResultController和我的
pubTime
这是一个时间戳。
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[self managedObjectContext]
sectionNameKeyPath:@"pubDate"
cacheName:@"transfersRoot"];
感谢大家