Iphone EXC错误访问错误

Iphone EXC错误访问错误,iphone,objective-c,ios,Iphone,Objective C,Ios,我在项目中使用Tapku日历。在选择日期的方法中 我在视图上显示了另一个视图。这是我的代码 - (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)date { self.dataController=[[TimeCardDataController alloc] init]; self.dataController.managedObjectContext=[self

我在项目中使用Tapku日历。在选择日期的方法中

我在视图上显示了另一个视图。这是我的代码

- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)date {

    self.dataController=[[TimeCardDataController alloc] init];
    self.dataController.managedObjectContext=[self context];
    [self.dataController initWithTimeCards];

    NSDate *weekStartDay=[date weekFirstDate];
    NSDate *weekEndDay=[date weekLastDate];
    self.billdailyValuePositiveArray= [self.dataController getTimeCardWithStartData:date endDate:date timeCardType:TIMECARD_STATUS_BILLABLE];   
    self.billweeklyValueNegetiveArray= [self.dataController getTimeCardWithStartData:weekStartDay endDate:weekEndDay timeCardType:TIMECARD_STATUS_NONBILLABLE];
    self.billweeklyValuePositiveArray= [self.dataController getTimeCardWithStartData:weekStartDay endDate:weekEndDay timeCardType:TIMECARD_STATUS_BILLABLE];
    self.billdailyValueNegetiveArray= [self.dataController getTimeCardWithStartData:date endDate:date timeCardType:TIMECARD_STATUS_NONBILLABLE];

    self.syncweeklyValuePositiveArray=[self.dataController getTimeCardWithStartData:weekStartDay endDate:weekEndDay timeCardType:TIMECARD_STATUS_SYNCED];
    self.syncweeklyValueNegetiveArray=[self.dataController getTimeCardWithStartData:weekStartDay endDate:weekEndDay timeCardType:TIMECARD_STATUS_NOTSYNCED];
    self.syncdailyValuePositiveArray= [self.dataController getTimeCardWithStartData:date endDate:date timeCardType:TIMECARD_STATUS_SYNCED];
    self.syncdailyValueNegetiveArray= [self.dataController getTimeCardWithStartData:date endDate:date timeCardType:TIMECARD_STATUS_NOTSYNCED];

    self.postweeklyValuePositiveArray= [self.dataController getTimeCardWithStartData:weekStartDay endDate:weekEndDay timeCardType:TIMECARD_STATUS_POSTED];
    self.postweeklyValueNegetiveArray= [self.dataController getTimeCardWithStartData:weekStartDay endDate:weekEndDay timeCardType:TIMECARD_STATUS_NOTPOSTED];
    self.postdailyValuePositiveArray= [self.dataController getTimeCardWithStartData:date endDate:date timeCardType:TIMECARD_STATUS_POSTED];
    self.postdailyValueNegetiveArray= [self.dataController getTimeCardWithStartData:date endDate:date timeCardType:TIMECARD_STATUS_NOTPOSTED];


    [self toggleCalendar];

    [self doOn:date];

}
do on方法显示另一个视图。但在点击日期后,它会显示视图。但在这之后,系统会显示EXC\u BAD\u访问。有什么想法吗。。我正在努力,但找不到错误。求你了,我需要帮助

下面是上述方法的代码:

 -(NSMutableArray *) getTimeCardWithStartData:(NSDate *) startDate endDate:(NSDate *)endDate timeCardType:(NSString *) timeCardType
{
    NSMutableArray* timeCardArray=[[NSMutableArray alloc] init];

    NSMutableArray *categoryTimeCardArray=[[NSMutableArray alloc] init] ;
    if ([timeCardType isEqualToString:TIMECARD_STATUS_BILLABLE]) 
    {
        categoryTimeCardArray=[self fetchedTimeCardWithStartDate:startDate endDate:endDate fetchedCategoryTimeCard:self.fetchedBillableTimeCards];

    }
    else if([timeCardType isEqualToString:TIMECARD_STATUS_NONBILLABLE])
    {
        categoryTimeCardArray=[self fetchedTimeCardWithStartDate:startDate endDate:endDate fetchedCategoryTimeCard:self.fetchedNonBillableTimeCards];

    }
    else if ([timeCardType isEqualToString:TIMECARD_STATUS_POSTED]) 
    {
        categoryTimeCardArray=[self fetchedTimeCardWithStartDate:startDate endDate:endDate fetchedCategoryTimeCard:self.fetchedPostedTimeCards];

    }
    else if([timeCardType isEqualToString:TIMECARD_STATUS_NOTPOSTED])
    {
        categoryTimeCardArray=[self fetchedTimeCardWithStartDate:startDate endDate:endDate fetchedCategoryTimeCard:self.fetchedNotPostedTimeCards];

    }
    else if([timeCardType isEqualToString:TIMECARD_STATUS_SYNCED])
    {
        categoryTimeCardArray=[self fetchedTimeCardWithStartDate:startDate endDate:endDate fetchedCategoryTimeCard:fetchedSyncedTimeCards];

    }

    else if ([timeCardType isEqualToString:TIMECARD_STATUS_NOTSYNCED])
    {
        categoryTimeCardArray=[self fetchedTimeCardWithStartDate:startDate endDate:endDate fetchedCategoryTimeCard:fetchedNotSyncedTimeCards];

    }





    return categoryTimeCardArray;


}               
这是initWithTimeCards方法

    -(void) initWithTimeCards
{
    [self fetchAllTimeCard];
    fetchedTimecards=[[NSArray alloc] init];
    fetchedBillableTimeCards=[[NSArray alloc] init];
    fetchedBillableTimeCards=[[NSArray alloc] init];
    self.fetchedNonBillableTimeCards =[[NSArray alloc] init];
    self.fetchedPostedTimeCards=[[NSArray alloc] init];
    self.fetchedNotPostedTimeCards=[[NSArray alloc] init];
    fetchedSyncedTimeCards=[[NSArray alloc] init];
    fetchedNotSyncedTimeCards=[[NSArray alloc] init];



    self.fetchedNonBillableTimeCards =[self   fetchTimceCardWithBillStatus:TIMECARD_BILL_STATUS_NONBILLABLE];
    self.fetchedPostedTimeCards=[self fetchTimceCardWithPostStatus:TIMECARD_BILL_STATUS_POSTED];
    self.fetchedNotPostedTimeCards=[self fetchTimceCardWithPostStatus:TIMECARD_BILL_STATUS_NOTPOSTED];
    fetchedSyncedTimeCards=[self fetchTimceCardWithSyncStatus:TIMECARD_BILL_STATUS_SYNCED];
    fetchedNotSyncedTimeCards=[self fetchTimceCardWithSyncStatus:TIMECARD_BILL_STATUS_NOTSYNCED];



}

`

尝试启用NSZombies,以查看哪个被过度释放的对象可能是您的问题

有关如何启用它的说明,请参阅

编辑:另外,确保检查-initWithTimeCards和-getTimeCardWithStartData:endDate:timeCardType方法,查看是否过度发布了其中的某些内容

编辑2:问题可能是一些数组没有正确地保留在内存中。尝试将fetchedSyncedTimeCards更改为self.fetchedSyncedTimeCards,并对fetchedNotSyncedTimeCards执行相同操作。您可能在-fetchTimceCardWithSyncStatus中返回了一个自动释放的对象,但之后没有保留它,从而导致程序调用不再分配的对象上的方法


但即使它有效,您也应该确保代码不会到处泄漏。

您能将代码放入代码标记中吗?奇怪的是,您的dataController对象上调用了两次init。这是故意的吗?也许两次调用它会导致内存损坏。感谢david指出这一点。也许是错误。我之所以进行分配,是因为在项目的第一阶段,我没有两次调用init方法。我没有在load view方法上分配对象。但后来我就这么做了,忘了删除那条语句。我启用了NSZombies和malloc history。但调试器中没有显示任何内容。调试器的堆栈跟踪在[objc msgsend]之后-PerformRunLoop-CFRunloop正在调用观察器回调函数OK,而您自己的类中没有看到任何对过度释放的对象或方法的引用?你能把其他方法的代码和我在编辑中提到的那些方法一样贴出来吗?谢谢。您是否使用ARC自动参考计数?如果不使用ARC,代码几乎到处都在泄漏,因为您增加了保留计数,但从未减少它。但由于你没有发送任何发布消息,我真的看不出有什么会被过度发布。你介意把你收到的stacktrace发出去吗?您是否尝试过设置一个符号断点来查看它在哪一行崩溃?。。。根据属性的设置方式,您可能会在fetchedSyncedTimeCards=。。。和fetchedNotSyncedTimeCards=…,因为它们不是通过setter方法显式保留或设置的。不,我没有做任何操作。我是ios编程新手。我正在发布我的堆栈跟踪。谢谢你的时间