0

在我的AppDelegate方法中applicationDidFinishLaunching:

// Initialize here
NSLog(@"Application finished launching...");

MyMain* mainAccess;                    // To send messages to SAAMain
mainAccess = [[Main alloc] init];

NSLog(@"Setting title...");
version = @"v1.0";
[mainAccess setTitleVersion:version];   // Set Title with proper version

如您所见,我创建了 MyMain 类的一个实例,以便向它发送消息(我所有重要的“主要”方法都位于其中)。在这种情况下,我正在尝试设置标题。

我的 MyMain 类有一个方法setTitleVersion并将 aNSString作为参数(版本)。

NSLog(@"setTitleVersion called");

NSString *title = [NSString stringWithFormat:(@"Version: %@", version)];
//[_mainWindow setTitle:([NSString stringWithFormat:title])];
[_mainWindow setTitle:@"Test"];

NSString *mainWindowTitle = _mainWindow.title;
NSString *test2 = _mainWindow.value;
NSLog(@"_mainWindow.title: %@\n_mainWindow.value: %@", mainWindowTitle, test2);

我有一个附加到这个 MyMain 类的主窗口的出口(如您在 _mainWindow 中看到的那样)。

我添加了一些NSLogs尝试调试自己。value 和 title 都返回为null.

我究竟做错了什么?正如我在控制台输出中看到的那样,该方法被调用。好像_mainWindow插座不能正常工作。

4

2 回答 2

1

假设您的孩子有一碗冰淇淋,并且想要在上面放一颗樱桃。你去冰箱拿出冰淇淋盒。你从柜子里拿出一个碗。你在碗里放了一些冰淇淋。现在你有一碗冰淇淋。你从冰箱里拿出一颗樱桃,然后在上面放一颗樱桃。然后你把一碗冰淇淋(上面放着樱桃)扔掉。现在你很困惑,因为你孩子的冰淇淋碗上仍然没有樱桃!你做错了什么?

这种情况是您的问题的隐喻。您需要将setTitleVersion:消息发送到现有MyMain. 您不能只创建一个全新的 实例MyMain,将消息发送给它,然后丢弃该新实例。

您对rdelmar答案的评论表明您现有的实例MyMain在您的主笔尖中,并且您有一个出口。我假设这意味着您的 . 上有一个类型的插座MyMainMyAppDelegate并且该插座连接到MyMain您的笔尖中的一个对象。在这种情况下,您希望将setTitleVersion:消息发送到插座中的对象。如果你的出口被命名mainObject,你会这样做:

[self.mainObject setTitleVersion:version];

如果您还没有创建插座MyAppDelegate,您可以使用 Xcode 的助手编辑器一步创建并连接它。打开助手编辑器并确保它正在显示MyAppDelegate.hMyMain然后从nib 中的对象控制拖动到您的@interface MyAppDelegate中,如下所示:

创建并连接新的插座

如果您已经在 中声明了一个插座MyAppDelegate,则可以在 nib 编辑器中连接它。按住 Control 键单击My App Delegate笔尖的对象列表中的占位符。然后,在 outlets 弹出窗口中,从 outlet 的圆圈拖动到MyMain对象占位符,如下所示:

连接现有插座

于 2013-02-13T04:45:51.627 回答
0

你说你有一个 IBOutlet 连接到 Main 类,但我对什么是什么有点困惑。首先,您没有将插座连接到类,而是将它们连接到对象。从您的问题很难判断,但我怀疑问题在于您正在代码中创建 MainAccess 的一个实例,但这不是您在 IB 中有出口的实例。

于 2013-02-13T04:41:17.847 回答