我遇到了类似的问题...为什么我看到黑屏?我没有分配东西吗?
很抱歉初学者的问题,但我不知道如何调试它。我的一个视图控制器看到一个空白(黑色)屏幕。当我在检查器中将视图控制器设置为“初始视图控制器”时,它按预期工作。但是,当我删除它(它不应该是最初的 VC,只是为了调试)并导航到视图时,我得到一个空白(黑色)屏幕。
VC 中有一个 webview(referenceDetailWebView),当我尝试在 VC 的 viewDidLoad 上注销它时,我得到(null)。同样,当我将 VC 设置为“初始”时,它会按预期注销 referenceDetailWebView 对象。
这是VC的实现...
@implementation DetailViewController
@synthesize currentReference, referenceDetailWebView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"reference/accommodation" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[referenceDetailWebView loadHTMLString:htmlString baseURL:nil];
// log for debugging
NSLog(@"%@", [self referenceDetailWebView]);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
我能想到的唯一一件事是我可能在我的转场中遗漏了一些东西。我正在以编程方式处理它们,很可能我在那里忽略了一些东西......?我的 didSelectRowAtIndexPath 看起来像这样......
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Reference *currentItem = [references objectAtIndex:indexPath.row];
NSString *mySegueID;
if([currentItem hasSubReferences]){
mySegueID = @"ShowSubTable";
} else {
mySegueID = @"ShowDetail";
}
[self performSegueWithIdentifier:mySegueID sender:nil];
}
我的 performSegueWithIdentifier 看起来像这样......
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
// the segue with identifier allows us to chose a segue programatically
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
Reference *item = [references objectAtIndex:path.row];
if([identifier isEqualToString:@"ShowSubTable"]){
// looking for sub table
ReferencesSubTableViewController *subTableVC = [[ReferencesSubTableViewController alloc] initWithNibName:nil bundle:nil];
[subTableVC setCurrentReference:item];
[self.navigationController pushViewController:subTableVC animated:YES];
} else if ([identifier isEqualToString:@"ShowDetail"]){
// looking for detail view
DetailViewController *detailVC = [[DetailViewController alloc] initWithNibName:nil bundle:nil];
[detailVC setCurrentReference:item];
[self.navigationController pushViewController:detailVC animated:YES];
}
}
除了 detailViewController 显示空白屏幕并为我的 referenceDetailWebView 提供 null 之外,segues 正在按预期工作。
我被困住了。非常感谢任何建议或指导!在此先感谢您的帮助!!
编辑: 看起来segues可能是原因。当我删除多个 segue 和相关代码,并将一个简单的 segue 从表格单元格添加到 DetailViewController 时,detailVC 和视图正确加载。不知道我在segues中错过了什么......?
我已将 performSegueWithIdentifier 简化为以下内容,但仍然出现空白屏幕...
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
Reference *item = [references objectAtIndex:path.row];
DetailViewController *detailVC = [[DetailViewController alloc] initWithNibName:nil bundle:nil];
[detailVC setCurrentReference:item];
[detailVC setTitle:[item title]];
[self.navigationController pushViewController:detailVC animated:YES];
}