Objective c Xcode:setTitle不工作

Objective c Xcode:setTitle不工作,objective-c,xcode,appkit,Objective C,Xcode,Appkit,在我的AppDelegate方法applicationdFinishLaunching: // Initialize here NSLog(@"Application finished launching..."); MyMain* mainAccess; // To send messages to SAAMain mainAccess = [[Main alloc] init]; NSLog(@"Setting title..."); version

在我的
AppDelegate
方法
applicationdFinishLaunching:

// 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类的一个实例,以便向它发送消息(我所有重要的“main”方法都位于该实例中)。在这种情况下,我试图设置标题

MyMain类有一个方法
setTitleVersion
,并将
NSString
作为参数(版本)

我有一个主窗口的出口连接到这个MyMain类(正如您可以看到的_mainWindow)

我添加了一些
nslog
来调试自己。值和标题返回为
null


我做错了什么?正如我在控制台输出中看到的那样,正在调用该方法。这就好像主窗口的插座工作不正常一样。

你说你有一个IBOutlet连接到主类,但我有点搞不清楚到底是什么。首先,您没有将插座连接到类,而是将它们连接到对象。很难从你的问题中分辨出来,但我怀疑问题在于你正在代码中创建一个Main、Main访问实例,但这不是你在IB中有出口的实例。

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

这个场景是你问题的隐喻。您需要将
setTitleVersion:
消息发送到
MyMain
现有实例。您不能只创建一个全新的
MyMain
实例,将消息发送给它,然后扔掉这个新实例

您对
rdelmar
的回答的评论是,您现有的
MyMain
实例位于您的主nib中,您有一个出口。我假设这意味着您的
MyAppDelegate
上有一个类型为
MyMain
的插座,该插座连接到nib中的
MyMain
对象。在这种情况下,您希望将
setTitleVersion:
消息发送到插座中的对象。如果您的插座命名为
mainObject
,您可以这样做:

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

[self.mainObject setTitleVersion:version];

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

[self.mainObject setTitleVersion:version];

我有一个Main类类型的Main对象。此主对象位于主窗口所在的主xib文件中。插座使用主对象。您的主xib文件是否也有App Delegate blue cube?如果是这样,你应该在你的应用程序委托中有这个出口,当你调用setTitleVersion时使用这个出口,而不是alloc init另一个主对象。是的,我有这个应用程序委托。如果我出于不同的原因也需要发送消息,那么不会出现同样的问题吗?@Shane,我不知道你的意思。如果要向IB中的某个对象发送消息,则在发送消息时,需要使用指向该对象的出口。单击“我控制”(显示蓝线)可将窗口拖动到MyMain类,以便创建出口。在弹出的对话框中,对象是Main。这个物体的主人是MyMain。啊,我明白你的意思了。我将一个对象从“对象”面板拖到主xib文件中,并将其设置为自定义类main。如何访问它?命名一个类
Main
是个坏主意,因为该类应该在名为
Main.m
的文件中实现。由于OSX默认使用不区分大小写的文件系统,因此该文件名将与名为
main.m
的文件冲突,该文件是在您创建项目时自动创建的。我在main之前添加了一个前缀,我不想透露。我会把它编辑成我的主页。哦,哇。所以基本上我所需要做的就是为main对象提供出口,而不是尝试实例化一个新的MyMain。现在可以了,非常感谢。我仍在努力理解OSX/iOS编程的所有复杂之处。