Синглтон EXC_BAD_ACCESS - PullRequest
1 голос
/ 22 мая 2010

поэтому у меня есть класс, который я объявляю как синглтон, и в этом классе у меня есть NSMutableArray, который содержит несколько NSDictionaries с некоторыми парами ключ / значение в них. Проблема в том, что это не работает, и я не знаю почему ... Я имею в виду, что это происходит с EXC_BAD_ACCESS, но я не знаю где. Я следовал за кодом, и он действительно создал новый массив при первом добавлении, добрался до конца функции ... и потерпел крах ...

    @interface dataBase : NSObject {
    NSMutableArray *inregistrari;

}

@property (nonatomic,retain) NSMutableArray *inregistrari;



-(void)adaugaInregistrareCuData:(NSDate *)data siValoare:(NSNumber *)suma caVenit:(BOOL)venit cuDetaliu:(NSString *)detaliu;
-(NSDictionary *)raportIntreData:(NSDate *)dataInitiala siData:(NSDate *)dataFinala;
-(NSArray *)luniDisponibileIntreData:(NSDate *)dataInitiala siData:(NSDate *)dataFinala;
-(NSArray *)aniDisponibiliIntreData:(NSDate *)dataInitiala siData:(NSDate *)dataFinala;
-(NSArray *)vectorDateIntreData:(NSDate *)dataI siData:(NSDate *)dataF;
-(void)salveazaInFisier;
-(void)incarcaDinFisier;
+ (dataBase *)shareddataBase;


@end

А вот и файл .m

#import "dataBase.h"
#import "SynthesizeSingleton.h"


@implementation dataBase
@synthesize inregistrari;


SYNTHESIZE_SINGLETON_FOR_CLASS(dataBase);


-(void)adaugaInregistrareCuData:(NSDate *)data siValoare:(NSNumber *)suma caVenit:(BOOL)venit cuDetaliu:(NSString *)detaliu{
    NSNumber *v=[NSNumber numberWithBool:venit];
    NSArray *input=[NSArray arrayWithObjects:data,suma,v,detaliu,nil];
    NSArray *keys=[NSArray arrayWithObjects:@"data",@"suma",@"venit",@"detaliu",nil];

    NSDictionary *inreg=[NSDictionary dictionaryWithObjects:input forKeys:keys];

    if(inregistrari == nil) {
        inregistrari=[[NSMutableArray alloc ] initWithObjects:inreg,nil];
    }else {
        [inregistrari addObject:inreg];
    }


    [inreg release];
    [input release];
    [keys release];

}

Он дошел до конца этой adaugaInregistrareCuData ... хорошо. сказал, что массив имел один объект ... а затем упал

1 Ответ

3 голосов
/ 22 мая 2010

Попробуйте добавить «NSZombieEnabled» со значением «YES» к аргументам исполняемого файла:

Щелкните правой кнопкой мыши по вашему исполняемому файлу, выберите «получить информацию» и добавьте эту запись к переменным в нижнем списке.

Это скажет вам, какой тип данных потерпел крах.

Использование build & analysis говорит мне, что вы отпускаете inreg, input и keys дважды.

Все три переменные будут автоматически освобождены, ваш ручной сброс вызовет сбой последующего автоматического выпуска и выдаст вам BAD_ACCESS.

Не отпускайте их вручную, удалите эти три строки из своего кода:

[inreg release];
[input release];
[keys release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...