Утечка памяти при получении данных из базы данных - PullRequest
0 голосов
/ 21 марта 2011

Эй, я создал собственный метод поиска для доступа к базе данных:

+(NSArray*) recordsForTable:(NSString *)table predicate:(NSPredicate *)prd{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:table inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];

    [fetchRequest setPredicate:prd];

    NSArray *records = [managedObjectContext executeFetchRequest:fetchRequest error:nil];

    [fetchRequest release];

    return records;
}

Затем я использую этот метод в этом методе:

-(NSArray *)tableViewControllerData{

    NSNumber *savedBool = [[NSNumber alloc] initWithBool:YES];

    NSString *onlyGetSavedVisitObjects = [NSString stringWithFormat:@"bolSaved=%@", savedBool];
    [savedBool release];
    NSMutableArray *data = [[[CoreDataAccess recordsForTable:@"LPVisit" stringPredicate:onlyGetSavedVisitObjects] mutableCopy] autorelease];
    NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dteVisitDate" ascending:NO];
    NSArray *descriptors = [NSArray arrayWithObjects:dateDescriptor, nil];
    [data sortedArrayUsingDescriptors:descriptors];

    return data;    
}

Проблема в том, чточто, когда пользователь вносит изменения в таблицу LPVisit и вызывает этот метод, чтобы показать эти изменения, он вызывает сбой приложения.

[EDIT]

Исключение, которое он создает:

 -[__NSArrayM objectID]: unrecognized selector sent to instance 0x4dac1f0

Я считаю, что ошибка в строке:

NSMutableArray *data = [[[CoreDataAccess recordsForTable:@"LPVisit" stringPredicate:onlyGetSavedVisitObjects] mutableCopy] autorelease];

Если я удаляю авто-релиз, я получаю утечку памяти, но приложение не падает.

Есть ли у кого-нибудь какие-либо идеиспасибо заранее

1 Ответ

0 голосов
/ 21 марта 2011

Возможно ли, что изменяемое копирование вызывает исключение, потому что *records равно nil? Это может произойти, если @"bolSaved=%@" является опечаткой и должно быть @"boolSaved=%@".

...