gpt4 book ai didi

objective-c - 事件处理程序中的 NULL 属性(cocoa 应用程序)

转载 作者:行者123 更新时间:2023-12-03 17:59:45 28 4
gpt4 key购买 nike

我有一个包含多个 IBOtlet 的类:

@interface MainDreamer : NSWindow <NSWindowDelegate>
{
IBOutlet NSTextField *dreamField;
IBOutlet NSTableView *dreamTable;
IBOutlet NSImageView *dreamview;

IBOutlet NSMutableArray *dreamlist;
IBOutlet NSMutableArray *dataset;
}

一切都好,但仅限于 mouseUp 事件处理程序:

- (void) mouseUp:(NSEvent *)theEvent{
[super mouseUp:theEvent];
long index = [dreamTable selectedRow];
Dream *dr = [dataset objectAtIndex:index];
dr.dreampicture = dreamview.image;
[dataset replaceObjectAtIndex:index withObject:dr];
}

全部变成NULL。

如何访问事件处理程序内的 IBOutlet?

最佳答案

How to get access to IBOutlets inside event handler?

你已经拥有了。导出只是实例变量(或属性,如果您这样声明的话); socket 或响应程序方法没有什么特别之处,会导致其中一种方法无法在另一种方法中工作。

那么为什么您的 socket 在代码的某些部分显示为已连接,而在其他部分则保持 nil

通常,这是因为您已在 Nib 中创建了一个 MainDreamer 对象,并在代码中创建了一个 MainDreamer 对象,或者您已在两个单独的 Nib 中创建了该对象。

无论哪种方式,这都会产生同一类的两个对象。它们不是同一个对象,其中一个的 socket 已连接,而另一个则没有。您单击的不是您在 Nib (或其中一个 Nib )中创建并连接的 Nib 。

证明这一点的方法是在 mouseUp: 方法以及您发现要连接的 socket 的任何位置记录 self。我希望您会发现 self 的不同值:正如我所说,两个对象。

解决方案是删除其中一个实例并将其所有用途更改为使用另一个实例。如果您在代码中创建对象之一,那么您应该删除该对象,以支持 Nib 中的对象。

关于objective-c - 事件处理程序中的 NULL 属性(cocoa 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345427/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com