2011-10-31 2 views
0

J'utilise le calendrier Tapku sur mon projet .Dans la méthode de sélection d'une dateEXC BAD erreur ACCESS

i montré une autre vue sur le view.Here est mon code

- (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]; 

} 

le faire sur la méthode montre une autre vue. Mais après avoir cliqué sur une date, il montre la vue. Mais après que le système affiche EXC_BAD_ACCESS.Any ideas .. J'essaie mais ne peux pas trouver l'erreur. S'il vous plaît je besoin d'aide

Voici le code pour les méthodes ci-dessus :::::::

-(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; 


}    

Ceci est la méthode 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]; 



} 

`

+1

Pourriez-vous mettre votre code dans les balises de code? – Wesley

+0

Il est étrange que vous ayez un init appelé deux fois sur votre objet dataController. Est-ce intentionnel? Peut-être qu'il y a une corruption de mémoire en l'appelant deux fois. – David

+0

Merci david pour le signaler. Peut-être que c'est l'erreur. J'allouais car à la première phase du projet, je n'appelais pas deux fois la méthode init. Je n'ai pas alloué l'objet sur la méthode load view. Mais plus tard, je l'ai fait et j'ai oublié de supprimer cette déclaration. –

Répondre

0

Essayez d'activer NSZombies pour voir quel objet est sur-relâché (c'est probablement votre problème).

Voir How do I set up NSZombieEnabled in Xcode 4? pour savoir comment l'activer.

EDIT: Aussi, assurez-vous de vérifier les méthodes -initWithTimeCards et -getTimeCardWithStartData:endDate:timeCardType pour voir si vous êtes trop libérant quelque chose là-dedans.

EDIT 2: Le problème est probablement que certaines de vos baies ne sont pas conservées correctement en mémoire. Essayez de changer fetchedSyncedTimeCards en self.fetchedSyncedTimeCards et faites de même avec fetchedNotSyncedTimeCards. Vous renvoyez probablement un objet autoreleased dans -fetchTimceCardWithSyncStatus et ne le retenez pas par la suite, ce qui oblige votre programme à appeler des méthodes sur un objet qui n'est plus alloué.

Mais même si cela fonctionne, vous devriez vraiment read up on memory management et assurez-vous que votre code ne fuit pas partout.

+0

J'ai activé NSZombies et l'histoire de malloc. Mais rien n'apparaît dans le débogueur. La trace de pile du débogueur suit [objc msgsend]; -performRunloopAction -CFRunloop-IS-Calling-out-to-a-observer fonction de rappel –

+0

OK, et vous ne voyez aucune référence à l'objet sur-relâché ou une méthode dans votre propre classe? Pourriez-vous aussi afficher le code des autres méthodes (celles que j'ai mentionnées dans le montage)? –

+0

: J'ai ajouté les codes pour les deux méthodes –

Questions connexes