2011-07-31 47 views
0

我已經將自定義對象數據存儲在數組中。我從一個函數中的自定義對象數組中獲取數據。當我第一次調用函數的時候它工作的很好,但是當我一次又一次地調用函數時,我得到了EXC_BAD_ACCESS。EXC_BAD_ACCESS在從客戶對象提取數據期間出錯

這裏是功能的細節。

-(void) facebookDisplayFunction:(int)atIndex { 


FacebookWallData *wall = (FacebookWallData *)[facebook_wallDataArray objectAtIndex:atIndex]; 


NSString *friendID= wall.actor_id; 
NSString *linkFetch= wall.permalink; 
NSString* postID=wall.postId; 

NSNumber *countNumber; 

NSString *[email protected]""; 
NSString* [email protected]""; 

for(int i=0; i< [facebook_LikesArray count];i++) { 

    FacebookLikes* countValues=[[FacebookLikes alloc]init]; 
    countValues=[facebook_LikesArray objectAtIndex:i]; 

// NSLog(@" postId_wall %@ LikePostId = %@",postID,countValues.PostID); 
    if([postID isEqualToString:countValues.PostID]) { 
     countNumber=countValues.Count; 

     if(countNumber>0) 
      friendID=countValues.Friends; 

     [countValues release]; 
     break; 
    } 

    [countValues release]; 
} 


for(int i=0;i< [facebook_FreindsArray count];i++) { 

    FacebookFreinds* friendsRecord=[[FacebookFreinds alloc]init]; 
    friendsRecord=[facebook_FreindsArray objectAtIndex:i]; 

    if([friendID isEqualToString:friendsRecord.UID]) { 
     friendName=friendsRecord.name; 
     profileThumImage=friendsRecord.pic_smal; 
     [friendsRecord release]; 
     break; 
    } 
    [friendsRecord release]; 
} 

// Adding values in table // 





[imageData addObject:@"facebook.png"]; 
[tableList addObject:wall.messages]; 
[profileUserName addObject:friendName]; 
[linksOfFacebookData addObject:linkFetch]; 
[RetweetAndLikeData addObject:@"5"]; 
[favedProfileThumb addObject:profileThumImage]; 
[twitterPostID addObject:@""]; 
[eachPostUID addObject:friendID]; 

    [wall release]; 

}

在這裏,我打電話的功能。 [self facebookDisplayFunction:0]; [self facebookDisplayFunction:0]; // EXC_BAD_ACCESS錯誤在這裏。

回答

0

爲什麼要分配一個像這樣的對象FacebookLikes* countValues=[[FacebookLikes alloc]init],然後將這個代碼爲countValues=[facebook_LikesArray objectAtIndex:i]的數組中的實例分配給同一個變量,然後使用這個[countValues release]釋放它?你不知道你在做什麼。

嘗試修改此:

FacebookLikes* countValues=[[FacebookLikes alloc]init]; 
countValues=[facebook_LikesArray objectAtIndex:i]; 

這個

FacebookLikes* countValues = [facebook_LikesArray objectAtIndex:i]; 

並刪除[countValues release]所有出現。在第二個for循環中爲friendsRecord做同樣的事情。另外,什麼是[wall release]?去掉它!

您不應該分配任何這些對象,因爲您實際上是從該數組獲取它們,而不是創建新實例。這隻會在代碼中產生泄漏。您不應該釋放任何這些對象,因爲它們由數組保留,並且它們負責在從數組中刪除或在數組被銷燬/釋放後釋放它們。請,rtfm

+0

是的,它現在正在工作。 –

0

如果你上線的錯誤:

[self facebookDisplayFunction:0]; 

在我看來,最有可能通過self指向的對象已經被釋放。所以,這個問題不會在facebookDisplayFunction ...

你可以回顧一下如何創建self指向的對象,或者發佈代碼,如果你需要更多的幫助?