Objective c 代表之间无效不工作-目标-C Mac OSX
ECHOAppDelegate.m:Objective c 代表之间无效不工作-目标-C Mac OSX,objective-c,cocoa,macos,delegates,Objective C,Cocoa,Macos,Delegates,ECHOAppDelegate.m: - (void)charlieInputTextHandler:(NSString *)theMessage { if (jarvisSecondTimeCheck1 == TRUE) { NSRunAlertPanel(@"ECHO", theMessage, @"", @"", @""); NSData *sendData1 = [theMessage dataUsingEncoding:NSUTF8StringEncod
- (void)charlieInputTextHandler:(NSString *)theMessage {
if (jarvisSecondTimeCheck1 == TRUE) {
NSRunAlertPanel(@"ECHO", theMessage, @"", @"", @"");
NSData *sendData1 = [theMessage dataUsingEncoding:NSUTF8StringEncoding];
[[inputPipe1 fileHandleForWriting] writeData:sendData1];
NSData *sendReturn1 = [@"\r" dataUsingEncoding:NSUTF8StringEncoding];
[[inputPipe1 fileHandleForWriting] writeData:sendReturn1];
[ContentsTextField1 insertText:theMessage];
[ContentsTextField1 insertText:@"\r"];
} else {
NSRunAlertPanel(@"ECHO", @"The task is not running; therefore, you cannot send DATA to JARVIS.", @"", @"", @"");
}
}
ChatController.m:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
ECHOAppDelegate *echo = [[ECHOAppDelegate alloc] init];
[echo charlieInputTextHandler:[message stringValue]];
if(![jid isEqual:[message from]]) return;
if([message isChatMessageWithBody])
{
NSString *messageStr = [[message elementForName:@"body"] stringValue];
NSString *paragraph = [NSString stringWithFormat:@"%@\n\n", messageStr];
NSMutableParagraphStyle *mps = [[[NSMutableParagraphStyle alloc] init] autorelease];
[mps setAlignment:NSLeftTextAlignment];
NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithCapacity:2];
[attributes setObject:mps forKey:NSParagraphStyleAttributeName];
[attributes setObject:[NSColor colorWithCalibratedRed:250 green:250 blue:250 alpha:1] forKey:NSBackgroundColorAttributeName];
NSAttributedString *as = [[NSAttributedString alloc] initWithString:paragraph attributes:attributes];
[as autorelease];
[[messageView textStorage] appendAttributedString:as];
}
}
好的,由于某种原因,jarvisSecondTimeCheck1(一个bool全局变量)返回FALSE,尽管我知道900%是真的,因为我在ApplicationIDFinishLaunching中澄清了这一点
以及守则的另一部分:
NSData *sendData1 = [theMessage dataUsingEncoding:NSUTF8StringEncoding];
[[inputPipe1 fileHandleForWriting] writeData:sendData1];
NSData *sendReturn1 = [@"\r" dataUsingEncoding:NSUTF8StringEncoding];
[[inputPipe1 fileHandleForWriting] writeData:sendReturn1];
[ContentsTextField1 insertText:theMessage];
[ContentsTextField1 insertText:@"\r"];
也不行。不过,我知道这是可行的。是因为我正在从另一个代理触发charlieInputTextHandler吗
谢谢 听起来你的一个指针是零。向nil对象发送消息将得到nil,这可以解释为什么没有看到预期的结果。因此,请检查所有指针和
IBOutlet
变量,以确保它们设置正确。并检查任何假设 您丢失了大量相关代码。粗略猜测一下,我认为这是一条关于出了什么问题的重要线索:
你不需要多次实例化你的应用程序委托。相反,我希望得到如下结果:
ECHOAppDelegate *echo = (ECHOAppDelegate *)[UIApplication sharedApplication].delegate;
我假设您正在原始实例上设置
jarvisSecondTimeCheck1
,并希望在您实例化的任何其他实例上设置它。对象不是这样工作的。我强烈推荐阅读和阅读。这是一款mac应用程序。我可以将其更改为NSApplication吗?是的,如果它是Mac应用程序,请使用NSApplication
。如果您的问题是未设置jarvisSecondTimeCheck1
,那么您应该将代码发布到您试图设置它的位置。嗯..现在它甚至没有运行charlieInputTextHandler。想法?在Mac OS上,您可以使用[NSApp delegate]
ECHOAppDelegate *echo = (ECHOAppDelegate *)[UIApplication sharedApplication].delegate;