2013-06-03 2 views
-5

질문이 있습니다. 나는 내가 무언가를 비판하지 않는다고 생각한다.버튼 작업 메서드에서 인스턴스 메서드를 실행하십시오.

변수가있는 클래스와 메소드가 있습니다.

  • AppDelegate.h /하는 .m
  • WifMon.h./m < - 나는의 인스턴스를 생성 그래서 지금 ViewController.h./m

을 언급 한 내 ViewController.m에서 WifMon은 (WifMon의 헤더가 포함되어 있습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    WifMon *test = [[WifMon alloc] initWithData:"google.de" withPort:443]; 
} 

없음 나는 버튼이 없어 내 "dynCheck"방법을 시작합니다.

- (IBAction)startCheck:(id)sender { 
    //start dynCheck here 
    [test dynCheck];  //this isn't working 
} 

하지만 작동하지 않습니다. 조치 방법 내에서 "테스트"인스턴스에 액세스 할 수 없습니다.

하지만 왜?

+0

서프라이즈합니다.'컴파일 시간 '오류가 발견되지 않았습니까? 'ViewDidLoad'와 함께 로컬 스코프에 객체를 만들었습니다. – Buntylm

+1

사실 놀랄 일이 아닙니다. –

+3

여러분은 최소한 기본적인 수준에서 C를 배우기 전에 C를 배워야합니다 *** 가장 좋은 iPhone App Ever (TM) *** ... –

답변

1

test 변수의 범위는 viewDidLoad 방법에서만 유효합니다.

이를 극복하려면 인스턴스 변수가 필요합니다. 더 나은 재산은 test 일 것입니다.

@interface ViewController() 

@property (nonatomic, strong) WifMon* test; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.test = [[WifMon alloc] initWithData:"google.de" withPort:443]; 
} 

- (IBAction)startCheck:(id)sender 
{ 
    //start dynCheck here 
    [self.test dynCheck]; 
} 

ARC를 사용하지 않으면주의하십시오! 하지 당신이해야

self.test = [[[WifMon alloc] initWithData:"google.de" withPort:443] autorelease]; 

- (void)dealloc 
{ 
    [super dealloc]; 

    [_test release]; 
} 
+0

Tank you, 너무 많이 도와 줬어 .--) – shizophren

1

C에서 변수를 선언하면 변수가 선언 된 범위에만 존재합니다. 함수 안에 선언하면 그 함수 안에 만 존재합니다.. 당신이 개체의 인스턴스 메소드 모두에서 액세스 할 수 있도록하려면

당신은 클래스의 인스턴스 변수로 test를 선언해야합니다

@interface ViewController : UIViewController { 
    WifMon *test; 
} 

다음 test는 모든 인스턴스 메서드에서 사용할 수 있습니다 그 물체. 인스턴스 변수가 다른 개체에 의해 액세스 할 수 또는 self.test를 사용하여 액세스 할 수 있도록하려면

또는, 당신은 다음과 같이 선언 할 수 있습니다

@interface ViewController : UIViewController 

@property (strong) WifMon *test; 

... 

@end 

는 그런 다음 self.test를 사용하여 액세스 할 수 있습니다.

이 예제는 ARC (기본적으로 사용하도록 설정되어 있으므로 이미 사용하고 있으므로)를 사용하고 있지만 그렇지 않은 경우 strong 대신 retain으로 속성을 선언해야합니다. dealloc 방법의 test

+0

대단히 감사합니다, 저를 도왔습니다. – shizophren

관련 문제