我有以下代表的PGMidi.h

@protocol PGMidiSourceDelegate
- (void) midiSource:(PGMidiSource*)input midiReceived:(const MIDIPacketList *)packetList;


然后在我的viewController.m中,我只想在调用委托时得到一个NSLog

@interface viewController () <PGMidiDelegate, PGMidiSourceDelegate>

@end

@implementation viewController;

- (void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList
{
  NSLog(@"test");
}


我知道代表正在工作,因为在PGMidi类中我也放了

- (void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList
{
 NSLog(@"test");
}


而且有效。

但是由于某种原因,它没有与viewController.m通信。我还在头文件中声明了@PGMidi类。但是也许我必须导入整个PGMidi.h?

最佳答案

在您的PGMidi.h中,您实际上应该声明一个委托属性,即

@property (nonatomic, assign) id<PGMidiSourceDelegate> delegate;


确保在您的PGMidi.m文件中synthesize该属性。然后,在您的PGMidi.m中,您应该这样做:

-(void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList {
    [delegate midiSource:midi midiReceived:packetList];
}


您实际上还需要将视图控制器设置为PGMidi对象的委托:

myPGMidi.delegate = myViewController;

关于objective-c - 类和viewController.m之间的委托(delegate),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10875770/

10-13 03:04