Могу ли я вызвать методы Objective-C из функции C? - PullRequest
1 голос
/ 13 марта 2011

Я новичок в Objective-C, поэтому то, что я пытаюсь сделать, может оказаться невозможным. Я занимаюсь рефакторингом большой функции C на несколько функций C и методов Obj-C.

Возможно ли это?

Следующее не будет строить и жалуется

«Я» необъявленное.

  void serverCB(CFReadStreamRef stream, CFStreamEventType event, void *myPtr)
{
    switch(event) {
        case kCFStreamEventHasBytesAvailable:
            [self readStreamData:stream];
            break;
        case kCFStreamEventErrorOccurred:
            NSLog(@"A Read Stream Error Has Occurred!");
            break;
        case kCFStreamEventEndEncountered:
            NSLog(@"A Read Stream Event End!");
            break;
        default:
            break;
    }
}

-(void) readStreamData: (CFReadStreamRef)stream
{   
        NSData *data = [[NSMutableData alloc] init]; //TODO: I have to flush this at some point..?
        uint8_t buffer[1024];
        unsigned int len = 0;       
        len =  [(NSInputStream *)stream read:buffer maxLength:1024];        
        if(len > 0)
        {
            [data appendBytes:&buffer length:len];
        }
        NSString *serverText = [[NSString alloc]    initWithData: data encoding:NSASCIIStringEncoding];
           [data release]; // I got my string so I think I can delete this
           [self processServerMessages:serverText];

    }
}

В первой из перечисленных функций 'serverCB' я пытаюсь отправить сообщение 'readStreamData' текущему объекту. Так я могу вызывать только функции c из функций c?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

Вы можете вызывать методы Objective-C из функции C.Но, как сказала ошибка, переменная self не определена.Вам нужно передать self в качестве параметра serverCB, например,

void serverCB(CFReadStreamRef stream, CFStreamEventType event, void* myPtr, id self) {
   ...
   [self readStreamData:stream];
   ...
}

...

serverCB(stream, event, NULL, self);
1 голос
/ 13 марта 2011

Вы также можете создавать функции класса.

@interface MyClass : NSObject
{}
+ (void) myDoSometing;
@end

void myDo(int foo)
{
  [MyClass DoSomething];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...