2010-05-22 4 views
1

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

ответ

3

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

щелкните правую кнопку исполнимый, выберите получить информацию и добавить, что вход переменные в нижнем списке.

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

Использование сборки & анализ показывает, что вы освобождаете inreg, ввод и ключи дважды.

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

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

[inreg release]; 
[input release]; 
[keys release]; 
+0

Текущий язык: авто; В настоящее время цель-с (GDB) продолжают 2010-05-22 22: 18: 59,829 Licenta [2954: 207] *** - [CFArray релиз]: сообщение, отправленное высвобождены например 0x3b62c70 (GDB) Это то, что Я получаю с NSZOmbieEnabled ... так что это CFArray .. wtf является CFArray? – user426132

+0

Пробовал выпустить релиз, как вы рекомендовали .. все та же ошибка. – user426132

+0

__forwarding__ --forwarding-0 nspopautoreleasepool uiapplicationhandleevent purpleeventcallback cfrunlooprunspecific cfrunloopruninmode gseventrunmodal gseventrun uiaplicationmain главный да .. смт делать с autorelease бассейном – user426132