推动细节视图

时间:2011-10-16 11:39:47

标签: iphone objective-c ios uitableview pushviewcontroller

我将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次

谢谢,如果你读到这里,对不起我的英语不好。

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