在我的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
插座无法正常工作。
答案 0 :(得分:1)
假设您的孩子有一碗冰淇淋,并且想在上面放一颗樱桃。你去冷冻室拿出冰淇淋纸盒。你从柜子里拿出一个碗。你在碗里放了一些冰淇淋。现在你有一碗冰淇淋。你从冰箱里拿出一个樱桃,然后把樱桃放在上面。然后你扔掉一碗冰淇淋(上面有樱桃)。现在你很困惑,因为你孩子的一碗冰淇淋仍然没有樱桃!你做错了什么?
此方案是您问题的隐喻。您需要将setTitleVersion:
消息发送到现有 MyMain
实例。您不能只创建MyMain
的全新实例,将消息发送给它,然后丢弃该新实例。
您对rdelmar
的回答的评论说明您现有的MyMain
实例位于您的主笔尖中,并且您有一个插座。我认为这意味着您的MyMain
上有MyAppDelegate
类型的插座,并且插座连接到笔尖中的MyMain
对象。在这种情况下,您希望将setTitleVersion:
消息发送到插座中的对象。如果您的商店名为mainObject
,您可以这样做:
[self.mainObject setTitleVersion:version];
如果您尚未在MyAppDelegate
中创建插座,则可以使用Xcode的助理编辑器一步创建插座并将其连接起来。打开助理编辑器并确保它显示MyAppDelegate.h
。然后控制 - 从笔尖中的MyMain
对象拖动到@interface MyAppDelegate
,如下所示:
如果您已在MyAppDelegate
中声明了插座,则可以在笔尖编辑器中将其连接。按住Control键并单击nib对象列表中的My App Delegate
占位符。然后,在插座弹出窗口中,从插座的圆圈拖动到MyMain
对象占位符,如下所示:
答案 1 :(得分:0)
你说你有一个IBOutlet连接到Main类,但我有点困惑什么是什么。首先,您不将插座连接到类,而是将它们连接到对象。从你的问题很难说,但我怀疑问题是你在代码中创建了Main,mainAccess的一个实例,但那不是你在IB中有出口的实例。