Singleton EXC_BAD_ACCESS

时间:2010-05-22 16:56:40

标签: objective-c

所以我有一个我声明为单例的类,在该类中我有一个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 个答案:

答案 0 :(得分:3)

尝试将值为“YES”的“NSZombieEnabled”添加到可执行文件的参数中:

右键单击您的可执行文件,选择获取信息并将该条目添加到底部列表中的变量。

这将告诉您哪种数据类型已崩溃。

使用build&分析它告诉我你正在发布 inreg,输入和密钥两次。

所有三个变量都将自动释放,您的手动释放将导致以后的自动释放失败,并为您提供BAD_ACCESS。

不要手动释放它们,从代码中删除这三行:

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