单击“后退”按钮时,UINavigationController应用程序崩溃

时间:2011-02-10 05:19:24

标签: iphone objective-c ios uinavigationcontroller

希望有人可以帮助我。

didSelectRowAtIndexPath方法中,我正在加载并推送详细视图控制器,当您点击详细视图中的“后退”按钮返回到根视图时,应用程序将崩溃。没有错误日志或任何内容。

我95%肯定这与“游乐设施”对象过早发布有关,但无法弄明白。

感谢您的帮助!

#import "RidesViewController.h"
#import "RideDetailViewController.h"
#import "JSON.h"

@implementation RidesViewController
@synthesize rides;

#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {

    [super viewDidLoad];

    self.tableView.backgroundView   = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"table-view-background.png"]];

    rides                           = [[NSDictionary alloc] init];

    NSString        *filePath       = [[NSBundle mainBundle] pathForResource:@"rides" ofType:@"JSON"];
    NSData          *jsonData       = [NSData dataWithContentsOfFile:filePath];  
    NSString        *responseString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    NSDictionary    *results        = [responseString JSONValue];

    rides                           = [results objectForKey:@"rides"];

    [rides retain];
}

#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [rides count];
}

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell   = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) cell   = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    cell.textLabel.text     = [[rides valueForKey:@"title"] objectAtIndex:indexPath.row];
    cell.accessoryType      = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    RideDetailViewController *rideDetailViewController = [[RideDetailViewController alloc] initWithNibName:@"RideDetailViewController" bundle:nil];

    NSString        *aTitle         = [[NSString alloc] initWithString:[[rides valueForKey:@"title"] objectAtIndex:indexPath.row]];
    NSString        *aImagePath     = [[NSString alloc] initWithString:[[rides valueForKey:@"imagePath"] objectAtIndex:indexPath.row]];
    NSString        *aDescription   = [[NSString alloc] initWithString:[[rides valueForKey:@"description"] objectAtIndex:indexPath.row]];
    NSString        *aVideoPath     = [[NSString alloc] initWithString:[[rides valueForKey:@"videoPath"] objectAtIndex:indexPath.row]];

    [rideDetailViewController initWithTitle:aTitle imagePath:aImagePath description:aDescription videoPath:aVideoPath];

    [self.navigationController pushViewController:rideDetailViewController animated:YES];

    [rideDetailViewController   release];
    [aTitle                     release];
    [aImagePath                 release];
    [aDescription               release];
    [aVideoPath                 release];
}

#pragma mark -
#pragma mark Memory management
- (void)didReceiveMemoryWarning {

    [super  didReceiveMemoryWarning];
}

- (void)dealloc {
    [super  dealloc];
}


@end

2 个答案:

答案 0 :(得分:1)

只需剪切整件viewdidload粘贴viewwillapper方法。

答案 1 :(得分:1)

在标题中定义NSString,然后将其放入cellForRowAtIndexPath: