Проблема управления памятью?получение ошибки «EXC_BAD_ACCESS» - PullRequest
0 голосов
/ 26 июля 2011

Мне кажется, что у меня проблемы с управлением памятью. я получаю ошибку «EXC_BAD_ACCESS», когда он пытается назначить второй раз (запускает код и выполняет первое назначение, но во второй раз он умирает).

У меня есть функция, которая будет принимать массив пользовательских объектов (содержит переменные даты и имени). мне нужно отсортировать этот массив по месяцам (все апрели будут отправлены в aprilList, могут в mayList и т. д.).

.h файл

@class SceneData;

@interface DetailedSceneViewController : UIViewController <UITableViewDataSource,   UITableViewDelegate> 
{
    UITableView *mainTableView;
    SceneData *sceneData;
    NSArray *monthsArray;
}


@end

.m файл

#import "SceneData.h"


- (void) sortMonths {
Agri_ImaGIS_iPhoneAppDelegate *dataCenter = (Agri_ImaGIS_iPhoneAppDelegate *) [[UIApplication sharedApplication] delegate];

NSMutableArray *janList, *febList, *marList, *aprList, *mayList, *junList, *julList, *augList, *sepList, *octList, *novList, *decList = [[NSMutableArray alloc] init];

int count = [dataCenter.sortedDataList count];

NSLog(@"count: %d", count);

for (int i = 0; i < count; i++)
{
    sceneData = [dataCenter.sortedDataList objectAtIndex:i];
    if ([sceneData.name rangeOfString:@"Jan" ].location != NSNotFound)
    {
        NSLog(@"jan name: %@", sceneData.name);
        [janList addObject: sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Feb" ].location != NSNotFound)
    {
        NSLog(@"feb name: %@", sceneData.name);
        [febList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Mar" ].location != NSNotFound)
    {
        NSLog(@"Mar name: %@", sceneData.name);
        [marList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Apr" ].location != NSNotFound)
    {
        NSLog(@"Apr name: %@", sceneData.name);
        [aprList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"May" ].location != NSNotFound)
    {
        NSLog(@"May name: %@", sceneData.name);
        [mayList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Jun" ].location != NSNotFound)
    {
        NSLog(@"Jun name: %@", sceneData.name);
        [junList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Jul" ].location != NSNotFound)
    {
        NSLog(@"Jul name: %@", sceneData.name);
        [julList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Aug" ].location != NSNotFound)
    {
        NSLog(@"Aug name: %@", sceneData.name);
        [augList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Sep" ].location != NSNotFound)
    {
        NSLog(@"Sep name: %@", sceneData.name);
        [sepList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Oct" ].location != NSNotFound)
    {
        NSLog(@"Oct name: %@", sceneData.name);
        [octList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Nov" ].location != NSNotFound)
    {
        NSLog(@"Nov name: %@", sceneData.name);
        [novList addObject:sceneData];
    }
    else if ([sceneData.name rangeOfString:@"Dec" ].location != NSNotFound)
    {
        NSLog(@"Dec name: %@", sceneData.name);
        [decList addObject:sceneData];
    }
}
}

Я неправильно обрабатываю объект sceneData?

1 Ответ

2 голосов
/ 26 июля 2011

Вы неправильно инициализируете свои массивы:

NSMutableArray *janList, *febList, *marList, *aprList, *mayList, *junList, *julList, *augList, *sepList, *octList, *novList, *decList = [[NSMutableArray alloc] init];

Этот синтаксис инициализирует только последний указатель ... Вы должны использовать:

NSMutableArray *janList = [[NSMutableArray alloc] init];
NSMutableArray *febList = [[NSMutableArray alloc] init];
...
NSMutableArray *decList = [[NSMutableArray alloc] init];

В другом примечании все этиобъект протекает, так как (если я не пропускаю что-то в вашем коде) они являются локальными переменными (не автоматически выпущены) и вы не вызываете release для них ...

...