Вызов метода экземпляра для доступа к экземпляру IBOutlet из другого класса - PullRequest
0 голосов
/ 23 марта 2012

Я искал много форумов, но это все еще сводит меня с ума. я не понимаю, как получить доступ к экземпляру IBOutlet, например, к классу «A» из класса «B», который пытается изменить значение, скажем, тип экземпляра - 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

1 Ответ

0 голосов
/ 23 марта 2012

В методе класса classB faceDetection: вы инициализируете экземпляр classA, производный от NSView, но не добавляете экземпляр в иерархию представления. Кроме того, при инициализации экземпляра classA вы не загружаете представление из кончика, поэтому экземпляр classA status, скорее всего, имеет значение nil progressStatus.

Я подозреваю, что вы, возможно, пытаетесь получить доступ к экземпляру classA, который уже был инициализирован и добавлен в иерархию представления в другом месте; но инициализация другого экземпляра не предоставит вам ссылку на исходный экземпляр.

...