使用NSDictionary访问问题

时间:2011-08-12 15:33:14

标签: iphone objective-c ios nsdictionary exc-bad-access

我有以下问题: 我在这里有一个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;
}

我在这里加载ENSL:

- (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"];
        }
    }
}

现在我的问题:

首先正确加载登记。 第一个“NSLOG()”给了我所有正确的数据。 作为方法LoadENSList结束的sool,ensList似乎有问题,因为我在第二个NSLOG()得到了一个BAD EXE-Error。

为什么?

2 个答案:

答案 0 :(得分:4)

在这一行:

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

您不使用属性访问器。这意味着该阵列是自动释放的,并且在下一个事件循环期间不再存在。

您需要将其更改为:

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

答案 1 :(得分:1)

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

尝试

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

在loadENSList中。

MFG,

侧击