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;