Objective c 代表之间无效不工作-目标-C Mac OSX

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

ECHOAppDelegate.m:

- (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;