调用实例方法从另一个类访问IBOutlet实例

时间:2012-03-23 16:46:42

标签: objective-c xcode macos cocoa iboutlet

我一直在搜索很多论坛,但它仍然让我发疯。 我不明白如何访问IBOutlet实例,例如A' A'来自班级' B'试图改变价值的是,假设实例类型是IBOutlet NSTextLabel * progressStatus with stringValue" Capturing"想要改变为"认识"。它只能从classA的实例方法调用,而不能从另一个类调用。

@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

1 个答案:

答案 0 :(得分:0)

classB的类方法faceDetection:中,您初始化了一个classA的实例,该实例派生自NSView,但您不会将该实例添加到视图层次结构中。此外,在初始化classA的实例时,您没有从笔尖加载视图,因此classA status的实例可能只有progressStatus

我怀疑您可能正在尝试访问已初始化并添加到其他位置的视图层次结构中的classA实例;但初始化另一个实例不会为您提供对原始实例的引用。