Iphone EXC错误访问错误
我在项目中使用Tapku日历。在选择日期的方法中 我在视图上显示了另一个视图。这是我的代码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
- (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编程新手。我正在发布我的堆栈跟踪。谢谢你的时间