我有以下代表的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/