我将tableView连接到数据库表。 当我点击一行时,我会推送一个包含该项目所有细节的视图。一切都运转正常。
这是主类中的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailsViewController *detailViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
NSDictionary *rowVals = (NSDictionary *) [shoppingListItems objectAtIndex:indexPath.row];
NSString *titleString = [(NSString *) [rowVals objectForKey:@"item"] autorelease];
NSString *category = [(NSString *) [rowVals objectForKey:@"groupid"] autorelease];
NSNumber *priceNumber = [(NSNumber *) [rowVals objectForKey:@"price"] autorelease];
NSString *priceString = [[priceFormatter stringFromNumber: priceNumber] autorelease];
NSDate *date = [(NSDate *) [rowVals objectForKey:@"dateadded"] autorelease];
NSString *dateString = [[dateFormatter stringFromDate:date] autorelease];
NSNumber *IO = [(NSNumber *) [rowVals objectForKey:@"incout"] autorelease];
detailViewController.stringTitle = titleString;
detailViewController.categoryVar = category;
detailViewController.priceVar = priceString;
detailViewController.dateVar = dateString;
detailViewController.IOVar = IO;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
,这在DetailsViewController.m
中- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = stringTitle;
nome.text = stringTitle;
prezzo.text = priceVar;
data.text = dateVar;
if ([IOVar isEqualToNumber:[NSNumber numberWithInt:1]]) {
categoria.hidden = NO;
categoriaLabel.hidden = NO;
photoLabel.hidden = NO;
categoria.text = categoryVar;
} else if ([IOVar isEqualToNumber:[NSNumber numberWithInt:0]]){
categoria.hidden = YES;
categoriaLabel.hidden = YES;
photoLabel.hidden = YES;
categoria.text = @"";
}
}
如果我使用main.m中的EXC_BAD_ACCESS推送并返回我的应用程序崩溃次数超过3次
谢谢,如果你读到这里,对不起我的英语不好。
答案 0 :(得分:0)
也许你过度释放你的变量。您正在从字典中提取细节控制器的ivars,该字典来自数组。将它们分配给字符串后,您将自动释放它们。我认为这就是问题所在。您正在清空数据数组。当您在稍后的行选择中请求它时,您尝试访问不再存在的数组或字典对象 - > EXC_BAD_ACCESS。
答案 1 :(得分:0)
这听起来好像是你过度释放一个物体(又名'僵尸')。
Xcode Instruments是追踪僵尸的绝佳工具。
在这里阅读,并试一试。
http://www.markj.net/iphone-memory-debug-nszombie/
比在使命召唤中杀死僵尸更有趣; - )
祝你好运!答案 2 :(得分:0)
您不需要自动释放从字典中获取的值,因为您不拥有它们。 Basic Memory Management Rules:如果您使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法创建对象,或者您通过保留它来获取所有权,则您拥有该对象。
在您的情况下,代码应为:
detailViewController.stringTitle = [rowVals objectForKey:@"item"];
等