我在Array中存储了自定义对象数据。我从函数中的自定义对象数组中获取数据。当我第一次调用函数它工作正常但是当我一次又一次调用它时,我得到了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 *friendName=@"";
NSString* profileThumImage=@"";
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 :(得分:0)
如果您收到错误:
[self facebookDisplayFunction:0];
在我看来,self
指向的对象很可能已被释放。所以,问题不在facebookDisplayFunction
...
您是否可以查看如何创建self
指向的对象,或者在需要更多帮助时发布代码?
答案 1 :(得分: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