【发布时间】:2014-08-01 21:31:45
【问题描述】:
我正在更新一个使用 XIB 文件但想要转换为 Storyboard 的旧 iOS 项目。我创建了我的 Storyboard,将它与适当的 ViewController 连接,删除了我可以找到的对 XIB 文件的所有引用,并将项目的主界面设置为使用我的 Storyboard。
但是,当我运行我的应用程序时,它仍然显示 XIB 文件而不是使用情节提要;好像还有什么东西在引用它们。唯一显示 Storyboard 的是初始场景/ViewController(很可能是因为它是新创建的 ViewController)。
我在网上查看了其他解决方案,但无济于事。我试过了:
- 清理项目
- 删除 DerivedData 文件夹
- 重启 Xcode 和我的电脑
- 更新了 MyApplication-info.plist
- 从 XIB 文件中删除了对 ViewController 的引用
- 尝试从项目中删除 XIB 文件(由于文件丢失,它会显示黑屏)
原始项目的目标是 iOS 5.1,新的 6.0,我使用的是 Xcode 5。有什么我可能遗漏的吗?
编辑:我没有以编程方式与其他控制器进行连接;我有故事板来处理。我在第一个 ViewController 中做的唯一一件事就是将字符串文本发送到下一个:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NextViewController * nextController;
if ([[segue identifier] isEqualToString:@"SegueToNext"])
{
nextController = [segue destinationViewController];
[nextController initWithTitle:@"New"];
}
}
编辑: 这是用于显示 XIB 文件而不是 Storyboard 的 ViewController 的代码。如您所见,没有与加载/推送新控制器或任何与 XIB 相关的调用相关的调用。
#import "NextViewController.h"
@interface NextViewController ()
@end
@implementation NextViewController
-(id) initWithTitle:(NSString *) title
{
self = [super init];
if (self)
{
self.title = title;
// Load the dictionary
self.dictionary = [NSDictionary dictionaryWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"NewDictionary"
ofType:@"plist"]];
}
return self;
}
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Render new slide
[self renderOpening];
}
-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
-(void) renderOpening
{
// 1st slide
NSLog(@"renderOpening");
// Initial settings for opening slide; all are UIOutlets (UIButton, UIImageView)
back.hidden = YES;
diagram.hidden = YES;
next.hidden = NO;
text.hidden = NO;
avatar.hidden = NO;
avatar.image = [[UIImage imageNamed:@"avatar"]
rescaleImageToSize:CGSizeMake(150, 150)];
text.text = @"Hello World";
}
@end
【问题讨论】:
-
包括您的
-didFinishLaunchingWithOptions:实现以及您如何呈现/推送viewController的示例。理想情况下,您应该使用segue转换到其他viewControllers。 -
我的 -didFinishLauchingWithOptions: 函数为空;我确保删除了对 XIB 的引用。我也确实使用 segues 进行过渡(使用 Storyboard 时你怎么能不使用?:D)。
-
只是检查。看起来不错,但我建议您为有问题的
viewControllers 之一发布与 segue 相关的代码 -
我唯一的segue代码是prepareForSegue,它只是调用下一个ViewController的函数。
标签: ios xcode storyboard xib uistoryboard