- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将 -mouseUp:
事件与 NSArrayController 的 -add:
方法关联起来? -mouseUp:
事件位于不同的对象中,但在保存受控数组的对象中进行 #import
编辑和实例化。
通常,对于 NSButton,您可以通过命令从按钮拖动到 NSArrayController 的 -add:
方法,但显然这对于鼠标事件是不可能的。
-- 新增内容 --
马特:感谢您的回答,第一次读到它是有道理的。作为具有过程和非 GUI 语言(用于嵌入式 Controller 的 PLM51 和 C51)背景的 Obj-C/Cocoa 初学者,我很难掌握 IBOutlets 和连接的实际实现。我对按钮之类的东西(即IB中可见的东西)没有任何问题,但这是我的理解:我需要在 myDocuments.h 文件中声明 -IBOutlet NSArrayControler * arryCtrl;
。现在请记住,我重写 -mouseUp
方法的对象称为 Canvas,在 myDocuments.h 中我有一个 Canvas * canvas
声明,因此,我有一个 Canvas 对象由 myDocument 在运行时实例化。在 IB 中,我从文件所有者(myDocument 右侧)拖动到 ArrayController,并建立了一个链接,但不是 -add:
,因为该选项不可用。在 Nib (myDocument)中没有 Canvas 对象但是,在 mouseUp ( Canvas 方法)中,如果我向 IBOutput 发送消息,即 [arrayCtrl add:self]
arrayCtrl 是未知的。
不管怎样,我相信你们一定会咯咯地笑,因为答案可能是显而易见的。然而,我真的很想理解这一切,并意识到问题出在我的新手编码上。感谢您为这个新手指明了正确的方向
最佳答案
这里的典型模式是让 Controller 成为 Canvas 对象的委托(delegate)。当您创建 Canvas 时,您还可以向其发送一条 setDelegate:self
消息。
然后,您可以使用一些消息定义委托(delegate)协议(protocol):
@protocol MyCanvasProtocol
@optional
-(void)canvas:(Canvas *)canvas mouseUp:(NSEvent *)event;
-(void)canvas:(Canvas *)canvas objectSelected:(id)theObject;
@end
然后在 Canvas 的 -mouseUp:
方法中,您只需将适当的消息发送到 Canvas 的委托(delegate)即可。
- (void)mouseUp:(NSEvent *)event {
// some mouse up code
if ([delegate respondsToSelector:@selector(canvas:mouseUp:)])
[delegate canvas:self mouseUp:event];
}
以这种方式构建代码可以让您轻松地在其他地方重用该 Canvas 对象,并且不会将其与 Controller 的实现联系起来。然后,您的 Controller 可以自由地以任何需要的方式在 Canvas 上创建它需要的任何对象。
关于cocoa - MouseUp 和 NSArrayController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351932/
正在完成我的第一个 Cocoa OS X 项目,其中我获取远程 XML 数据并将对象存储在 NSMutableArray 中。 今天,当我在项目中第一次打开IB时,我发现了对象NSArrayContr
我是 Objective-C 的新手,到目前为止我很喜欢它。然而,我似乎在兜圈子。我试图在不编写代码的情况下做尽可能多的事情。是否可以有效地将一个 NSArrayController 的内容集绑定(b
我有一个简单的 NSArrayController 连接到我的 coreData 模型之一。我可以轻松地显示 NSTableView 中的所有项目,没有问题,但是,如果我尝试将包含 NSPopUpBu
在我的 MainController 中,有一个 Person 数组,它绑定(bind)到 NSArrayController。人员姓名显示在表name 列中。如果我将一个按钮绑定(bind)到 NS
我有一个连接到 NSManagedObjectContext 的 NSArrayController。此外,我有一个 NSTableView,其内容和选择索引绑定(bind)到所述 NSArrayCo
我正在 Xcode 控制台中检查 NSArrayController 的数量,我得到了这个: (lldb)po [_myArrayAC.content count] nil 但是如果我尝试检查该值是
我在使用 NSArrayController rearrangeObjects 函数时遇到了麻烦 - 该函数是从某些后台步骤调用的,有时应用程序会因错误而崩溃:“endUpdates 在没有 begi
我刚刚意识到有两种方法可以使用 NSArrayController。 将 Controller 绑定(bind)到数组并向数组添加对象。或者根本不使用任何数组,直接将对象添加到 Controller
我正在开发一个 Mac 应用程序,并且正在努力让谓词过滤器正常工作。对于 NSArrayController,使用 fetch 与过滤谓词的方式有什么不同吗? 我正在使用 Core Data 来存储我
我想使用 NSArrayController 向 NSTableView 提供数据。我面临的问题是我不想将所有数据预先加载到数组中,然后使用数组 Controller setContent: 方法。我
我有一个示例项目 https://github.com/ericgorr/LazyFetching 设置非常简单。在我的 CoreData 模型中,我有两个实体: 具有 name 属性和与 Item
非常简单的问题让我抓狂:以编程方式清除 NSArrayController 选择的正确方法是什么? 我正在设计一个包含以下组件的 View : NSArrayController *controlle
我无法让核心数据支持的 NSArrayController 在我的代码中正常工作。下面是我的代码: pageArrayController = [[NSArrayController alloc] i
我正在努力将通过拖放(文件从 finder 到 NSView)接收到的变量传递给 AppDelegate 中的 NSArrayController。 NSView 接收拖放: class MyView
我在我的 OS X 应用程序中使用 Core Data,我将一些 TableViews 绑定(bind)到 NSArrayControllers。我遇到的问题是,当我尝试使用数组 Controller
我在过滤 NSArrayController 时遇到问题。内容数组绑定(bind)到一个包含 NSDictionaries 的 NSMutableArray。我想过滤所有“名称”键等于“a”的 NSD
我有一个 NSArrayController,其内容是我的 AppDelegate 的“servers”属性。 我有一个 NSTextField ,它绑定(bind)到 NSArrayControll
我有一个链接到核心数据模型的 NSArrayController 子类。在我调用的方法之一中 [self performSelectorInBackground:@selector(someLongE
也许我不明白如何正确使用 NSArrayController,但这是我的情况。 我的实体设置如下:帐户 -> 文件夹 -> 聊天。因此,我将针对特定文件夹实体进行大量聊天。我希望我的数组 Contro
我有一个 NSArrayController,它返回一个 NSManagedObjects 数组,但是我只对在 NSTableView 中显示这些对象的某些属性感兴趣,并且不需要所有这些属性。有没有办
我是一名优秀的程序员,十分优秀!