将 xib 和 ViewController 复制到新项目后,我的应用程序不会绘制并在触摸事件时崩溃

Posted

技术标签:

【中文标题】将 xib 和 ViewController 复制到新项目后,我的应用程序不会绘制并在触摸事件时崩溃【英文标题】:After copying xib and ViewController to a new project my app doesn't draw and crashes on touch events 【发布时间】:2011-11-21 13:29:45 【问题描述】:

我已经将一些文件从一个非常小的(并且可以工作的)项目复制到一个更大的 Xcode 项目中。 特别是,我复制了一个 xib 文件(只有一个 UIView 子类元素)、UIView 子类和 ViewController。 较小的项目只是简单地绘制一个彩色背景并在用户触摸屏幕时绘制圆圈。

我已经修改了更大项目的代码,以便在开始时加载 xib 文件。我已将此添加到 AppDelegate 以便它加载新的 xib 而不是旧的。 (有关详细信息,请参阅编辑 #1)

即使调用了drawRect(我已经测试过添加NSLog),也不会显示任何内容[*]。此外,如果我点击模拟 iPhone 的屏幕,应用程序就会崩溃。

int retVal = UIApplicationMain(argc, argv, nil, nil);
Program received signal EXC_BAD_ACCESS

我不确定问题出在哪里,所以请告诉我可以发布的内容。 我有 Xcode 4,我正在使用 ios 5。

感谢您的帮助。希望这个问题不要太天真。

编辑 #1: 这是我的带有类列表的 xib。我正在尝试编辑 Jabber Client that I have found here 的源代码以插入我自己的视图。 我无法发布图片,但这是链接

http://i.stack.imgur.com/gDsNb.png

类 CircleDrawer 处理触摸和绘制圆圈。 MTViewController 类正在发送测试消息。 JabberClientAppDelegate 类(与下载的代码基本相同)连接到服务器并对用户进行身份验证。我改变的是这个方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[MTViewController alloc] initWithNibName:@"MTViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

return YES;

/*
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

return YES;*/

编辑#2: 我从头开始。 我正在尝试重建应用程序,但我遇到了崩溃。我已经开始了另一个讨论,因为它与这个问题没有直接关系。 EXC_BAD_ACCESS right after touchesBegan

[*]:如果我模拟按下主页按钮瞬间我可以看到背景颜色(当然我看不到其他任何东西,因为模拟器返回到跳板)。

【问题讨论】:

我怀疑你没有在 Interface Builder 中连接东西。 这也是我害怕的……你能告诉我怎么做吗?我一直在寻找这方面的教程,但它们都引用了 Interface Builder 中的“App Delegate”对象......我没有(我只有文件的所有者、第一响应者和我的自定义 UIView) 这意味着您需要将视图控制器的出口连接到 IB 中的视图项,并将代理连接回视图控制器/应用程序代理,视情况而定。如果没有看到 Xib 和类定义,我不能告诉你更多。 更新:你没有应用代理?然后你必须手动添加它。 你知道为什么没有app delegate吗?无论如何,我已经用更多信息更新了问题,如果您需要更多信息,请告诉我。 【参考方案1】:

检查您的 MainWindow.xib。

    在窗口下方添加 appDelegate 对象(在 xib 中)。 将您的 appDelegate 对象的类属性设置为您自己的 appdelegate 类。 那么你的 window 对象应该连接到 appdelegate 对象的 window 属性。 现在在代码库中创建 viewController 类的对象并将子视图添加到窗口。

希望这些步骤能让您对代码有所了解。

我猜你一定已经完成了所有这些步骤。

【讨论】:

以上是关于将 xib 和 ViewController 复制到新项目后,我的应用程序不会绘制并在触摸事件时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

swift3:如何将 xib 呈现给 viewcontroller

对于 iOS,将 ViewController.xib 自定义类更改为另一个类是啥意思?

iOS - 使用 xib 中的 tabBarController 将数据从一个 viewController 传递到另一个 viewController

将图像从 tableViewcell(Xib 文件)传递给另一个 ViewController

如何使用一个 ViewController 文件加载横向 xib?

Swift:iOS - 通过3rd类将数据从ViewController传递到xib文件