2011-07-31 35 views
0

我有10个custome对象存储在数组中。这是我的代码。 facebook_wallDataArray是NSMUtable数组。在从客户对象中获取数据时出错EXC_BAD_ACCESS

for(int i=0;i<10;i++) { 
    FacebookWallData* wallPost=[[FacebookWallData alloc]init]; 
    [email protected]"Wall Values"; 
[facebook_wallDataArray addObject:wallPost]; 

      [wallPost release]; 
} 

现在我有一个函数,它将对象值存储在TableView Array中。我在这里调用函数。

for(int i=0;i<10;i++) { 
[self faceboookDisplay:i] 
} 

这里是我的功能体。

-(void) facebookDisplayFunction:(int)atIndex { 

    FacebookWallData* wall=[[FacebookWallData alloc]init]; 

    wall=[facebook_wallDataArray objectAtIndex:atIndex]; 

     [tableList addObject:wall.messages]; 
    [wall release]; 
} 

但是我的程序崩溃了EXC_BAD_ACCESS异常。我没有得到我的代码错在哪里? facebook_wallDataArray存储这样的值。它是NSMUtableArray。

"<FacebookWallData: 0x4c52ee0>", 
"<FacebookWallData: 0x4c52df0>", 
"<FacebookWallData: 0x6828300>", 
"<FacebookWallData: 0x6826d50>", 
"<FacebookWallData: 0x4e25a10>", 
"<FacebookWallData: 0x9317c60>", 
"<FacebookWallData: 0x4c53190>", 
"<FacebookWallData: 0x4e47e90>", 
"<FacebookWallData: 0x4c53380>", 
"<FacebookWallData: 0x93176e0>", 

感谢

回答

1

您创建一个新的walldata对象,但你得到该数组中的一个。所以,你失去了指向刚刚创建的一个(内存泄漏)并释放从一个NSArray的自动释放对象=>崩溃

而是执行此操作:

-(void) facebookDisplayFunction:(int)atIndex 
{ 
    FacebookWallData* wall = nil; 
    wall = [facebook_wallDataArray objectAtIndex:atIndex]; 
    [tableList addObject:wall.messages]; 
} 

E:另一件事,你是静态循环10次,我认为如果你使用数组的数量会更好,如果数组的大小发生变化,但你忘记更改for循环中的数字,那么你将得到一个异常,这会破坏你的应用程序。

+0

我改变了代码,但现在我正在调用EXC-BAD_ACCESS函数。在这一行“[self facebookDisplayFunction:i];”。我也将静态数字更改为数组数。 –

+0

whenevr我想一次又一次地调用函数,它是抛出除外。 –

+0

然后你再次释放一些东西,你需要手动释放东西的唯一地方是在第一个循环中,而不是在它之后的那个循环 –