UINavigationController 应用程序在单击“返回”按钮时崩溃

Posted

技术标签:

【中文标题】UINavigationController 应用程序在单击“返回”按钮时崩溃【英文标题】:UINavigationController app crashes when clicking the "back" button 【发布时间】:2011-02-10 05:19:23 【问题描述】:

希望有人可以帮助我。

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

【问题讨论】:

当应用程序在您的开发者构建中崩溃时,立即打开调试器并查看代码中的哪一行导致崩溃。然后把这段代码贴在这里,我们可以帮助你............ 【参考方案1】:

在标题中定义您的NSString,然后将它们放入cellForRowAtIndexPath:

【讨论】:

哪些 NSStrings? aTitle、aImagePath 等或 viewDidLoad 中的 filePath 字符串?我不能在 didSelectRowAtIndexPath 中使用 NSStrings,因为我需要 indexPath.row 变量。 实际上,在您的 cellForRowAtIndexPath: 代表中尝试它们。 太棒了。那行得通。我唯一要做的另一件事是保留每个 NSString,我还必须在 viewDidAppear 方法中添加 [self.tableView reloadData]。【参考方案2】:

只需从viewdidload剪切整个内容,然后粘贴viewwillapper方法上。

【讨论】:

没有崩溃日志。它只是崩溃。 崩溃怎么办? EXC_BAD_ACCESS?信号?如果您在“调试”版本中,调试器应该在这里提供帮助。它在调试器控制台中显示了什么? [游乐设施保留];删除这个并将其他内容粘贴到 viewwillapper 中?

以上是关于UINavigationController 应用程序在单击“返回”按钮时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

带有 uinavigationcontroller 和 uitabbarcontroller 的 iphone 应用程序

iOS 应用启动黑屏,UINavigationController,Nib,RootViewController

具有嵌套 UINavigationController 的应用程序在 iOS SDK 4.2 中崩溃

使用多个 UINavigationController 实现登录应用

iOS 应用程序奇怪的崩溃 [UINavigationController _startCustomTransition:]

UINavigationController:对所有弹出视图控制器的视图应用通用填充/边距