Пустота между делегатами не работает - Objective-C Mac OSX - PullRequest
0 голосов
/ 28 мая 2011

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%, потому что я разъяснил это в applicationDidFinishLaunching.

И другая часть кода:

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 от другого делегата?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

Вы пропускаете чертовски много соответствующего кода. По грубым предположениям, я бы сказал, что это большой ключ к пониманию того, что идет не так:

ECHOAppDelegate *echo = [[ECHOAppDelegate alloc] init];

Вам не нужно создавать экземпляр делегата приложения более одного раза. Вместо этого я бы ожидал что-то вроде следующего:

ECHOAppDelegate *echo = (ECHOAppDelegate *)[UIApplication sharedApplication].delegate;

Я предполагаю, что вы устанавливаете jarvisSecondTimeCheck1 для своего исходного экземпляра и ожидаете, что он будет установлен для любого другого экземпляра, который вы создаете. Это не так, как работают объекты. Я настоятельно рекомендую прочитать раздел Руководства по программированию приложений iOS для делегата приложения и Цель обучения C: Учебник для начинающих .

0 голосов
/ 28 мая 2011

Звучит так, будто один из ваших указателей равен нулю.Отправка сообщения нулевому объекту даст вам ноль, что может объяснить, почему вы не видите ожидаемых результатов.Поэтому проверьте все ваши указатели и IBOutlet переменные, чтобы убедиться, что они установлены правильно.И проверьте любые предположения тоже!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...