从 UITabBarController 加载 Nib 时出现问题

发布于 2024-10-28 10:15:52 字数 1313 浏览 1 评论 0原文

我正在尝试从 TabBarController 加载 Nib。我通过分配 selectedIndex 来做到这一点。通过索引加载的 ViewController 在 TabBarController 所在的 MainWindow.xib 中指示,分配要在每个选项卡栏项中加载的 Nib 的名称。加载工作正常,但是如果我在要加载的 ViewController 中创建一个 IBOutlet 并将其链接到任何内容(IBOutlet 的对象可以属于任何类),那么它会在我分配 selectedIndex 的行中崩溃。

编辑>> 我有一个应用程序委托,其中包含链接到 MainWindow.xib 中创建的 UITabBarController 对象的 UITabBarController 。

在该 UITabBarController 对象中,有一些选项卡栏项目,每个项目都链接到不同的 UIViewController。这些链接是通过属性 NIB 名称建立的。

我正在尝试测试将其链接到空 UIViewController 的第一个项目,在本例中我将其称为 TestViewController(创建了 TestViewController.h、TestViewController.m 和 TestViewController.xib)。我在第一个选项卡栏项的 NIB Name 属性中编写了 TestViewController。有用。

现在我将 IBOutlet UILabel 放入 TestViewController 中。我在 TestViewController.h 中这样定义它:

#import <UIKit/UIKit.h>


@interface TestViewController : UIViewController {
    UILabel *label;
}

@property (nonatomic, retain) IBOutlet UILabel *label;

@end

然后在 TestViewController.m 中合成标签对象。我在 TestViewController.xib 中放置了一个 UILabel。它仍然有效。

然后,我将 TestViewController 中定义的标签对象链接到我在 NIB 文件中创建的 UILabel。我编译并测试。这不起作用。它在我将 selectedIndex 分配给应用程序委托中定义的 UITabBarController 的部分崩溃。分配如下:

self.tabBarController.selectedIndex = 0;

我使用 0,因为我仅使用第一个选项卡栏项目进行测试。它因 SIGABRT 信号而崩溃。

有什么想法为什么会发生这种情况吗?

I'm trying to load a Nib from a TabBarController. I'm doing this by assigning selectedIndex. The ViewController loaded by index is indicated in the MainWindow.xib where the TabBarController is, assigning the name of the Nib to be loaded in each Tab Bar Item. Loading works, but if I create an IBOutlet in the ViewController to be loaded and link it to anything (the IBOutlet's object can be of any class) then it crashes in the line where I assign selectedIndex.

Edit>>
I have the application delegate which contains a UITabBarController linked to a UITabBarController object created in MainWindow.xib.

In that UITabBarController object there are some Tab Bar Items each one linked to different UIViewControllers. These links are established through the property NIB Name.

I'm trying to test the first item linking it to an empty UIViewController, which in this case I called TestViewController (TestViewController.h, TestViewController.m and TestViewController.xib are created). I wrote TestViewController in the NIB Name property of the first Tab Bar Item. It works.

Now I put an IBOutlet UILabel in the TestViewController. I define it like this in the TestViewController.h:

#import <UIKit/UIKit.h>


@interface TestViewController : UIViewController {
    UILabel *label;
}

@property (nonatomic, retain) IBOutlet UILabel *label;

@end

I then synthesize the label object in the TestViewController.m. I place a UILabel in the TestViewController.xib. It still works.

Then I link the label object defined in the TestViewController to the UILabel I created in the NIB file. I compile and test. It doesn't work. It crashes in the part where I assign the selectedIndex to the UITabBarController defined in the application delegate. The assignation is made like this:

self.tabBarController.selectedIndex = 0;

I use 0 because I'm testing only with the first Tab Bar Item. It crashes with SIGABRT signal.

Any ideas why this could be happening?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

终弃我 2024-11-04 10:15:52

通过编辑,您的问题得到了显着改善。根据您告诉我们的内容,很难确切地说为什么会发生坠机,但我可以为您指出正确的方向。

您已经找到了导致崩溃的行,这是一个好的开始。在该行上放置一个断点并调试应用程序。当您到达断点时,查看 self.tabBarController。是零吗?如果没有,它的 viewControllers 数组中有多少个对象?如果有一个或多个,请查看您的 TestViewController。在其 -loadView 方法或 UIViewController -loadView 上放置断点。即使你看不到 -[UIViewController loadView] 的源代码,你仍然可以观察它的效果:当你到达该方法的末尾时,视图控制器的 view 属性应该为非 nil。

另外,崩溃发生后请查看控制台。通常会有一条错误消息告诉您应用程序崩溃的大致原因。

Your question is significantly improved by the edit. It's hard to say definitively why the crash happens given what you've told us, but I can point you in the right direction.

You've found the line that causes the crash, which is a good start. Place a breakpoint on that line and debug the app. When you hit the breakpoint, look at self.tabBarController. Is it nil? If not, how many objects are in its viewControllers array? If there's one or more, take a look at your TestViewController. Put a breakpoint on its -loadView method, or on UIViewController -loadView. Even if you can't see the source code for -[UIViewController loadView], you can still watch its effect: by the time you get to the end of the method, the view controller's view property should be non-nil.

Also, look in the console after this crash happens. There's usually an error message there telling you roughly why the app crashed.

病毒体 2024-11-04 10:15:52

问题解决了。我忘记将链接到选项卡栏项的 UIViewController 更改为 TestViewController。

The problem is solved. I forgot to change the UIViewController linked to the Tab Bar Item to TestViewController.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文