user426132
user426132

Reputation: 1441

Singleton EXC_BAD_ACCESS

so I have a class that I declare as a singleton and in that class I have a NSMutableArray that contains some NSDictionaries with some key/value pairs in them. The trouble is it doesn't work and I don't know why... I mean it crashes with EXC_BAD_ACCESS but i don't know where. I followed the code and it did create a new array on first add, made it to the end of the function ..and crashed ...

    @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

And here is the .m file

#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];

}

It made it to the end of that adaugaInregistrareCuData ... ok . said the array had one object ... and then crashed

Upvotes: 1

Views: 1036

Answers (1)

favo
favo

Reputation: 5458

Try adding "NSZombieEnabled" with value "YES" to your arguments on your executeable:

Right click your executeable, select get info and add that entry to the variables in the bottom list.

This will tell you what datatype has crashed.

Using build & analyze it tells me that you are releasing inreg, input and keys twice.

All three variables will be autoreleased, your manual release will cause the later autorelease to fail and give you your BAD_ACCESS.

Don't manually release them, remove these three lines from your code:

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

Upvotes: 3

Related Questions