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:]