2012-03-23 164 views
0

我一直在尋找很多論壇,但它仍然讓我發瘋。 我不明白如何訪問IBOutlet實例,例如類「B」的類「A」,它嘗試更改值讓我們說實例類型是IBOutlet NSTextLabel * progressStatus with stringValue「Capturing」想要更改爲「認識」。它只能從classA自身的實例方法中調用,而不能從另一個類中調用。調用實例方法從另一個類訪問IBOutlet實例

@interface classA : NSView 
{ 
     NSTextField *progressStatus; 
} 
@property (assign) IBOutlet NSTextField *progressStatus; 
-(void)recognizeStatus; 
@end  

#import "classA.h" 

@implementation classA 
@synthesize progressStatus; 

-(void)awakeFromNib 
{ 
     [self recognizeStatus];  //successfully change the value inside progressStatus 
} 

-(void)recognizeStatus 
{ 
     [progressStatus setStringValue:@"Recognizing"]; 
     NSLog(@"Progress Status : %@",progressStatus.stringValue); 
} 

- (void)captureOutput:(QTCaptureOutput *)captureOutput didOutputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection*)connection 
{ 
     //code to convert videoFrame to IplImage type named frameImage 

     BOOL faceDetected = [classB faceDetection:frameImage]; 
} 
@end 

#import "classA.h" 

@interface classB : NSObject 
{ 

} 
+(BOOL)faceDetection:(IplImage*)source; 
@end 

#import "classA.h" 
#import "classB.h" 

@implementation classB 
+(BOOL)faceDetection:(IplImage*)source 
{ 
     classA *status = [[classA alloc] init];  
     [status recognizeStatus];      //no changes with the value inside progressStatus 

     //return bool type 
} 
@end 
+0

'//這是行不通的!'不能幫助我們理解你的問題。你期望發生什麼,你實際看到了什麼?一個崩潰,一個編譯器錯誤,當你預期它的UI不會改變? – Jonah 2012-03-23 16:52:53

+0

即使在類B中不會調用recognitionStatus方法,它在UI中也沒有更改。我期望成功調用recogniseStatus方法,因此類A中的NSTextField會將其文本字段從「捕獲」更改爲「識別」。 – 2012-03-23 17:03:52

回答

0

classB的類方法faceDetection:初始化的classA一個實例,從NSView派生,但你不實例添加到視圖層次結構。此外,在初始化classA實例時,您並未從筆尖加載視圖,因此classAstatus的實例可能沒有progressStatus

我懷疑你可能試圖訪問classA的實例,該實例已經被初始化並添加到別處的視圖層次結構中;但初始化另一個實例將不會爲您提供對原始實例的引用。

+0

是的,我不知道如何將實例添加到視圖層次結構並將其引用到原始實例。我從另一個帖子看到使用委託,但我不知道如何使用它。 – 2012-03-24 00:05:07

+1

這取決於'classB'是否持有對'classA'現有實例的引用。如果沒有,那麼你需要重新設計兩個類之間的關係。委託模式仍然需要兩個類之間的引用關係,雖然很弱。或者,您可以使用'NSNotificationCenter'從'classB'發佈通知;和'classA'可以註冊這些通知。 – FluffulousChimp 2012-03-24 03:31:15

+0

好吧,我會嘗試使用通知中心。你有這樣的例子嗎? – 2012-03-25 02:05:02

相關問題