подготовка базового набора результатов данных для сгруппированного uitableview

мне создали 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"];

благодаря всем

1
задан choise 14 July 2010 в 20:57
поделиться

1 ответ

Обычно, когда вы хотите отобразить результаты выборки Core Data в UITableView, вы используете NSFetchedResultsController. Вы можете выбрать атрибут, по которому хотите сгруппировать результаты, указав sectionNameKeyPath во время инициализации.

Итак, если ваш метод работает, то вам решать, хотите ли вы изменить свой код или нет.

Но, пожалуйста, убедитесь, что вы [returnArray autorelease] перед возвратом. Это общепринятая практика Objective-C, что любой метод без "alloc", "new" или "copy" в имени будет возвращать автоматически освобожденный объект.

2
ответ дан 2 September 2019 в 23:05
поделиться