gpt4 book ai didi

objective-c - 如何修复 NSArray 属性上的 EXC_BAD_ACCESS?

转载 作者:行者123 更新时间:2023-11-29 13:48:40 24 4
gpt4 key购买 nike

这是另一个 EXC_BAD_ACCESS 问题。虽然我已经完成了我的功课并且确信我没有过度释放我的 NSArray。

下面是我的代码片段:

tableData = [NSDictionary dictionaryWithJSONString:JSONstring error:&error];
//Collect Information from JSON String into Dictionary. Value returns a mutli
dimensional NSDictionary. Eg: { value => { value => "null"}, etc }

NSMutableArray *t_info = [[NSMutableArray alloc] init];
for(id theKey in tableData)
{
NSDictionary *get = [tableData objectForKey:theKey];
[t_info addObject:get];
[get release];
} // converting into an NSArray for use in a UITableView

NSLog(@"%@", t_info);
//This returns an Array with the NSDictionary's as an Object in each row. Returns fine

if (tvc == nil)
{
tvc = [[tableViewController alloc] init]; //Create Table Controller
tableView.delegate = tvc;
tableView.dataSource = tvc;
tvc.tableView = self.tableView;
tvc.tableData = t_info; //pass our data to the tvc class
[tvc.tableView reloadData];
}
...

现在在我的 TableViewController 类中:

@implementation tableViewController
@synthesize tableData, tableView;

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [tableData count]; //Returns X Amount Fine.
}

- (UITableViewCell *)tableView:(UITableView *)the_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier"];

UITableViewCell *cell = [the_tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}

NSLog(@"%@", tableData); //** CRASHES!!**
cell.textLabel.text = @"This is a test";
return cell;
}

如果我要注释掉 NSLog,它会正常工作并在每个表行上返回“这是一个测试”。

这个真的让我难住了,我所有关于这个问题的文章通常都与保留/内存问题有关。

还有一点很重要。如果我要从我的第一类代码传递我的原始 (NSDictionary) tableData 并在我的 tableViewController 中运行相同的脚本 - 我可以 NSLog 对象完美无缺。

最佳答案

您唯一需要释放对象的情况是您通过newalloccopy 显式分配了它。

NSMutableArray *t_info = [[NSMutableArray alloc] init];
for(id theKey in tableData)
{
NSDictionary *get = [tableData objectForKey:theKey];
[t_info addObject:get];
[get release];
}

你不应该在这里发布get。通过这样做,您将释放 tableData 字典所持有的引用,这是不好的。我的猜测是这就是导致您遇到的问题的原因。

如果我没记错的话,[tableData count] 返回预期值的原因是数组仍然持有已释放的引用。

关于objective-c - 如何修复 NSArray 属性上的 EXC_BAD_ACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6080206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com