簡體   English   中英

類和viewController.m之間的委托

[英]Delegates between class and viewController.m

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

是否在PGMidi.h中包含@end來結束代碼@protocol PGMidiSourceDelegate PGMidiSourceDelegate? 還要確保在viewController.h中您說@interface viewController : (parentClass) <PGMidiSourceDelegate (parentClass)是viewController繼承的任何類。 基本上,您的問題是您忘記了@end或未指定viewController是PGMidi.h的委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM