我有以下问题: 我在这里有一个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。
为什么?
答案 0 :(得分:4)
在这一行:
ensList = [ensListFirstReturn objectForKey:@"return"];
您不使用属性访问器。这意味着该阵列是自动释放的,并且在下一个事件循环期间不再存在。
您需要将其更改为:
self.ensList = [ensListFirstReturn objectForKey:@"return"];
答案 1 :(得分:1)
似乎是内存管理的问题..
尝试
ensList = [[ensListFirstReturn objectForKey:@"return"] copy];
在loadENSList中。
MFG,
侧击