Xcode:setTitle无效

时间:2013-02-13 04:27:32

标签: objective-c xcode appkit

在我的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,并以NSString作为参数(版本)。

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来尝试调试自己。值和标题都返回null

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

2 个答案:

答案 0 :(得分:1)

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

此方案是您问题的隐喻。您需要将setTitleVersion:消息发送到现有 MyMain实例。您不能只创建MyMain的全新实例,将消息发送给它,然后丢弃该新实例。

您对rdelmar的回答的评论说明您现有的MyMain实例位于您的主笔尖中,并且您有一个插座。我认为这意味着您的MyMain上有MyAppDelegate类型的插座,并且插座连接到笔尖中的MyMain对象。在这种情况下,您希望将setTitleVersion:消息发送到插座中的对象。如果您的商店名为mainObject,您可以这样做:

[self.mainObject setTitleVersion:version];

如果您尚未在MyAppDelegate中创建插座,则可以使用Xcode的助理编辑器一步创建插座并将其连接起来。打开助理编辑器并确保它显示MyAppDelegate.h。然后控制 - 从笔尖中的MyMain对象拖动到@interface MyAppDelegate,如下所示:

create and connect new outlet

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

connect existing outlet

答案 1 :(得分:0)

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