2011-08-12 103 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,

側擊