Objective c 类和viewController.m之间的委托

Objective c 类和viewController.m之间的委托,objective-c,ios,delegates,Objective C,Ios,Delegates,我有PGMidi.h和以下代表 @protocol PGMidiSourceDelegate - (void) midiSource:(PGMidiSource*)input midiReceived:(const MIDIPacketList *)packetList; 然后在我的viewController.m中,我只想在调用委托时获得一个NSLog @interface viewController () <PGMidiDelegate, PGMidiSourceDelegate&

我有
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");
}
它是有效的


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

您实际上应该声明一个委托属性,即

@property (nonatomic, assign) id<PGMidiSourceDelegate> delegate;
您还需要将视图控制器实际设置为PGMidi对象的代理:

myPGMidi.delegate = myViewController;

您是否将
@end
包含在PGMidi.h中以结束您的代码
@protocol PGMidiSourceDelegate
?还要确保在viewController.h中您说的是
@interface viewController:(parentClass)我一直对此很好奇;
assign
是什么意思?我读过apple docs和其他问题,但我不能完全理解其含义。assign表示弱引用——在本例中,由于视图控制器已保留在内存中,因此我们不需要通过使其成为强属性来增加对象的保留计数。在许多情况下,如果在代理设置中不使用弱引用,则可以创建保留循环。退房
-(void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList {
    [delegate midiSource:midi midiReceived:packetList];
}
myPGMidi.delegate = myViewController;