所以我有一个我声明为单例的类,在该类中我有一个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 ......好吧。说数组有一个对象......然后崩溃
答案 0 :(得分:3)
尝试将值为“YES”的“NSZombieEnabled”添加到可执行文件的参数中:
右键单击您的可执行文件,选择获取信息并将该条目添加到底部列表中的变量。
这将告诉您哪种数据类型已崩溃。
使用build&分析它告诉我你正在发布 inreg,输入和密钥两次。
所有三个变量都将自动释放,您的手动释放将导致以后的自动释放失败,并为您提供BAD_ACCESS。
不要手动释放它们,从代码中删除这三行:
[inreg release];
[input release];
[keys release];