- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
感谢您花时间阅读本文并希望对我有所帮助!
我正在 Xcode 4 中编写我的第一个程序,第一次使用 Objective-C 和 Cocoa。我一直在关注教程,但此时我想使用自定义 View 显示自定义图形,其中图形根据模型对象中的值而变化。
我的 Controller 类 GameController 基于 NSObject,在初始化期间创建我的模型对象,并成功接收按钮操作消息,适当更新模型对象,并使用其输出更新窗口上的文本字符串。我通过在我的 xib 文件中创建一个 NSObject 对象(称为 MainMenu.xib 的默认(?)名称,但它包括我的应用程序中的所有 UI),使用实用程序 Pane 将其类设置为 GameController 来完成此操作,然后然后将其操作和导出连接到适当的 UI 元素。
我已将自定义 View 拖到窗口中,并使用实用程序 Pane 将其类设置为我的自定义 View 类 BoardView,它基于 NSView。在 BoardView 中,我重写了 drawRect: 以用蓝色填充 View 的背景,然后绘制由模型类 (GameStatus) 定义的每个图形。
问题是,我不知道如何从 BoardView 类访问 GameStatus 中的数据,或者让 GameController 更新 BoardView 的成员变量。除了在 Interface Builder 中之外,我还没有通过在窗口上放置自定义 View 来实例化 BoardView。我的 xib 文件(Interface Builder 中左侧的列或列表)中没有 BoardView 对象。
我尝试在我的 GameController 类中创建一个 BoardView 对象的导出(正如我上面提到的,它在我的 xib 中确实有一个对象),并将该导出连接到我的窗口中的 BoardView 自定义 View ,并且 Interface Builder 似乎没关系。然而,当我运行程序时,我的 GameController 类中 BoardView 导出指针的值为 0x0。 socket 似乎没有连接到 BoardView 对象。我不知道是否需要在 Interface Builder 中做其他事情来创建一个实际的对象(我尝试在左侧列表中创建一个对象,但后来无法找到一种方法将其连接到显示的实际自定义 View 在 window 上)。
更令人困惑的是,当我运行应用程序时,窗口的 BoardView 区域将显示蓝色背景,实际上还有我在 drawRect: 函数中定义的任何其他图形。但是,由于无法与我的模型对象对话,我无法根据模型的状态更改图形。我不确定硬编码图形正确显示的事实是否意味着某处有一个对象,或者它是否以某种方式基于类的通用模板进行绘制。后者对我来说并没有真正的意义,但如果前者是正确的,我将无法弄清楚如何从代码的其他部分与该对象进行通信。
我觉得我只是缺少对 Xcode/Interface Builder 如何创建对象或其他东西的一些基本理解。我真的很感激有人准确地告诉我我在 MVC 对象/类之间的连接中缺少什么。
预先感谢您为我提供的任何帮助!
编辑2011/09/06:要下载我的项目的副本以进行查看,请转到此处: http://talix.homeip.net/2011/rival/这是我的家庭服务器,我对此是业余爱好者,所以如果它不起作用,请发表评论。谢谢!另外,如果除了编辑我原来的帖子之外,还有更好的方式回复评论,请告诉我;我也是这个网站的新手。 ;-)
-乔
最佳答案
听起来你只是实例化一个 GameController
和一个BoardView
,这发生在 Nib 。
这就是问题的核心:
I tried to create an outlet to a BoardView object in my GameController class (which does have an object in my xib, as I mentioned above), and connecting that outlet to the BoardView custom view in my window, and Interface Builder seemed fine with that. However, when I run the program, the value of the BoardView outlet pointer in my GameController class is 0x0. It seems like the outlet is not being connected to a BoardView object.
您的代码中的哪个位置需要对 BoardView 的引用但却为零?是在 GameController 的 init 方法中,还是在 GameController 的其他方法中?
如果它在 init 内部,这就是我所期望的。加载 nib 的代码必须在连接 socket 之前初始化对象。
(如果它在 init 之外,我建议首先断开并重新连接 socket 。)
<小时/>在MVC中, Controller 通常代理模型和 View 之间的通信,所以我建议你这样处理:
drawRect
,让 BoardView 从游戏 Controller 获取游戏状态。我还建议您将 GameController 作为您应用程序的委托(delegate):
RivalAppDelegate.[hm]
.GameController.h
,之后 @interface GameController : NSObject
,添加<NSApplicationDelegate>
GameController.m
,实现applicationDidFinishLoading
并在那里设置您的应用程序。 (如果您愿意,您甚至可以调用setGameStatus
。)关于xcode - 如何以编程方式更改自定义 View 对象的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7303970/
我正在观看来自 iTunes U. 的视频讲座,其中讲师展示了如何使用 Xcode 的调试器部分并能够将该窗口从主窗口拉开。 不幸的是,视频显示了如何在 Xcode3 中执行此操作的说明。如何在 Xc
现在我正在开发一个使用 Markdown 的静态网站。我不想在 SublimeText 中编辑文件,而是想在 Xcode 中编辑它们。我可以在 Xcode 中打开各个文件,但我想打开整个静态站点目录并
现在我正在开发一个使用 Markdown 的静态网站。我不想在 SublimeText 中编辑文件,而是想在 Xcode 中编辑它们。我可以在 Xcode 中打开各个文件,但我想打开整个静态站点目录并
我真的厌倦了其他用户的项目错误,因为 XCode 的默认类引用类型是“相对于 XCode 文件夹”。我知道您可以将其更改为“相对于封闭组”,这就是我们的项目,但是任何时候有人创建一个新的类文件并且忘记
我对 Xcode 一无所知,除了它是来自 Apple 的开发人员界面,它实际上来自 OSX CD,它也用于创建 iPhone 应用程序。 我也知道它有一个 Applications 文件夹,里面装满了
更新 Xcode(从 7.2 到 7.2.1)后,XcodeServer 无法运行 Xcode Service。当我选择更新的 Xcode 时,提示消息:Enable Accessibility ac
我很难找到有关新 XCode 布局的信息。如何查看源文件的反汇编,而不仅仅是 C++ 代码? 最佳答案 在 Xcode 4.2(和 Xcode 5)中,您可以通过以下方式查看文件的汇编或反汇编: 显示
我在 XCode 中为我的项目添加了一个文件夹并将其命名为 Themes,它将用于存储我的 iPad 应用程序的主题。在那下面我有红色、蓝色等等。 它们出现在 XCode 中。但是当我查看物理文件夹时
作为我之前 How can I create a reference cycle using dispatchQueues? 的后续: 对于强引用(会造成泄漏,但不是循环引用),例如Timer、Dis
我有一台 macbook air,我去商店安装 Xcode 7.3 并点击更新 App 按钮,然后出现了一个加载图标,但等待 30 分钟后什么也没发生。我从商店成功安装了 simple recorde
我的项目现在有一个project.xcworkspace/xcshareddata目录。 Xcode在project.xcworkspace/xcshareddata目录中存储什么? 最佳答案 xcs
我不经常使用 XCode 进行开发,最近 MacPorts 告诉我我需要获得 3.1 才能使包工作。我去了苹果,他们为我提供了最新版本,结果只适用于 OSX 6。因为我有 OSX 5,它对我没有任何帮
有谁知道如何强制 Xcode 停止运行。我更新到 6.2 但现在它不能正常工作。我需要退出 Xcode 才能完成更新或卸载并重新安装。菜单中的相当 Xcode 不可用。无法将其拖到垃圾箱,因为它说它仍
我最近从我的项目中删除了一些旧的测试类并删除了文件。正如预期的那样,文件被移到垃圾箱并在 git 中显示为已删除。 不幸的是,测试类和它们定义的测试用例继续出现在测试导航器中。我已经尝试过常见的疑点,
Xcode 中的场景编辑器显示大小但不显示单位。它是以英寸为单位的尺寸还是以米为单位的尺寸? 例如,当我选择一个节点时,例如一个盒子,当我在节点检查器中检查它的属性并在“边界框”旁边的“变换”部分检查
只想知道 xcode 项目中事件可执行文件的目的是什么? 谢谢 索拉布 最佳答案 自己找到了..希望它会帮助某人。 您可以在其中运行和测试软件产品的可执行环境。可执行环境定义了应该用来运行产品的程序。
刚回到我的办公 table ,Xcode 一直在文件中突出显示/强调空白区域。如果我输入一些东西它就会消失,但如果我切换标签并回来,它们会重新出现。 更新:这不是由“显示隐形”选项引起的。那看起来不一
我首先注意到这一点 Cmd-/偶尔拒绝为注释取消注释的代码行工作。但是现在(刚刚使用 XCode 4.1,虽然这可能无关)它发生在 Cmd-B建立。 我无法弄清楚我正在做什么导致这种情况,或者是否有任
我不太了解Xcode 4的工作区的实用程序。它们的用途是什么,它们如何帮助Xcode进行开发? 最佳答案 例如。您有一个在两个应用程序中使用的库。您很可能为此库拥有一个自己的项目,对吗?现在,您可以自
我正在关注一个应用程序教程,它说: “接下来,在 Xcode 应用程序项目目录的根目录下创建一个空文件,并调用该文件 Podfile。使用您喜欢的文本编辑器打开它,然后在其中粘贴以下行:” 我很困惑这
我是一名优秀的程序员,十分优秀!