![](/img/trans.png)
[英]Accessing Class Data Members in ViewController.m (xCode / Objective C)
[英]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.