【发布时间】:2010-07-14 06:04:53
【问题描述】:
我有一个从数据源对象创建的 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 中创建了以下 getter 方法。
- (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(这是一个时间戳)按日期对我的 tableviewcontroller 进行排序。
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[self managedObjectContext]
sectionNameKeyPath:@"pubDate"
cacheName:@"transfersRoot"];
谢谢大家
【问题讨论】:
标签: iphone objective-c uitableview core-data