0

我有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?

4

2 回答 2

1

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

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

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

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

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

myPGMidi.delegate = myViewController;
于 2012-06-04T02:51:23.257 回答
0

您是否包括在 PGMidi.h@end中结束您的代码?@protocol PGMidiSourceDelegate还要确保在 viewController.h 中您说的是@interface viewController : (parentClass) <PGMidiSourceDelegate。(parentClass) 是 viewController 继承自的任何类。基本上,要么你的问题是你忘记了@end,要么你没有指定 viewController 是 PGMidi.h 的代表。

于 2012-06-04T02:51:23.750 回答