2011-08-12 60 views
0

我有以下问题: 我有一个NSDictionary的位置:访问问题的NSDictionary的

@interface ENSListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 
{ 
NSDictionary* ensList; 
} 

@property (nonatomic, retain) IBOutlet NSDictionary* ensList; 

现在我有,我想在这里设定的行数一个UITableView:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
[self LoadENSList]; 
NSLog(@"%@", ensList); //Crash Bad Exec 
return 2000; 
} 

我在这里加载ENSList:

- (void) LoadENSList 
{ 
    if (ensList == nil) 
    { 
     NSDictionary *ensListFirstReturn = [ENSHandler GetENSListForFolderType:folder_type andFolderID:folder_id]; 
     BOOL success = [[ensListFirstReturn objectForKey:@"success"] boolValue]; 
     if (success) 
     { 
      ensList = [ensListFirstReturn objectForKey:@"return"]; 
      NSLog(@"%@", ensList); 
     } 
     else 
     { 
      [MyAlert ShowSimpleAlert:@"Fehler" andText:@"ENS-Ordner-Liste konnte nicht geladen werden"]; 
     } 
    } 
} 

现在我的问题:

enlist在第一个地方加载正确。 第一个“NSLOG()”给我所有正确的数据。 与LoadENSList方法结束时一样,ensList似乎有问题,因为我在第二个NSLOG()中得到了一个BAD EXE错误。

为什么?

回答

4

在这一行:

ensList = [ensListFirstReturn objectForKey:@"return"]; 

你不使用属性访问器。这意味着数组是自动释放的并且在下一个事件循环中不再存在。

你需要把它改成这样:

self.ensList = [ensListFirstReturn objectForKey:@"return"]; 
1

似乎是内存管理的问题..

在loadENSList尝试

ensList = [[ensListFirstReturn objectForKey:@"return"] copy]; 

MFG,

侧击