2012-06-20 2 views
0

시간이 double이라고합니다. 내가 다른 클래스의 메소드에 두 배를 전달할 수 있습니다 이유를 확인할 수 있지만, 요구하지 수 같은 방법은 존재 클래스에서 더블 말했다내 메소드가 동일한 변수에 대해 다른 값을 반환하는 이유

내 헤더 파일은 다음과 같이 같습니다.

@property (nonatomic) double time; 

내 구현은 이런 식입니다 :

@implementation MainVewController 

@synthesize time; 

- (void) viewDidLoad 
{ 
    startTime = NSDate.date; 
} 

- (double) returnTime { 
    NSLog (@"time is disappearing?? %f", time); 
    return time; 
} 

- (double) logTime { 
    NSLog (@"for some reason, this one is working and returns a value %f", time); 
    return time; 
} 

내 다른 클래스 내 배를 요구한다 :

@synthesize mainViewController = _mainViewController ; 

- (MainViewController *)mainViewController { 
    if (!_mainViewController) _mainViewController = [[MainViewController alloc] init]; 
    return _mainViewController; 
} 

- (BOOL)getTime { 
    double timeGotten = [self.mainViewController returnTime]; 
    // why does this return 0? 
    return TRUE; 
} 

시간 변수는 지속적으로 MainVewController 내에서 업데이트되는 :

time = [[NSDate date] timeIntervalSinceDate: startTime]; 
+0

두 방법과 관련하여 time 변수가 선언 된 위치는 어디입니까? –

+0

다른 곳에서 어떻게 묻지 않았습니까? 참고로, 너는 두 배로 돌아 오지 않는다 .... 너의 두 배'time '은 존재하지 않을지도 모른다. 중단 점을 설정하십시오. 먼저 self.mainViewController가 있는지 확인한 다음 시간 값을 확인하고'timeGotten'이 필요로 할 경우를 대비하여 반환하십시오. – Legolas

+0

returnTime과 logTime은 표시된 코드에 대해 동일한 값을 반환합니다. 우리가 볼 수있는 한, 당신은 결코 시간의 가치를 설정하지 않습니다. –

답변

1

"다른 클래스"가 self.mainViewController을 처음 요청하면 새 클래스가 만들어집니다. 나는 여기에서 짐작하고있다. 그러나 그것이 MainViewController라고 불리는 이래로, 아마 "다른 학급"이 그 자신의 새로운 하나를 만들기 전에 존재하는 그것들 중의 1 개가 아마있다.

그 첫 번째 MainViewController은 업데이트가 일어나는 곳입니다.

0
기능 유형 double의 변수를 반환하지만 유형 double의 값을 반환 return 문에 넣어 결코 함수 선언에서

당신의 상태 .

희망이 도움이됩니다.

0

코드에 전체 내용이 나와 있지 않습니다. 새로운 코코아 애플리케이션에서 코드를 복제했습니다. 약간의 차이점이 있지만 로직은 변경되지 않습니다.

#import <Cocoa/Cocoa.h> 

@interface AppDelegate : NSObject <NSApplicationDelegate> 

@property (nonatomic) double time; 

@property (assign) IBOutlet NSWindow *window; 

@end 

AppDelegate.m는 다음과 같습니다 :

AppDelegate.h은 다음과 같습니다 내 새로운 코코아 프로젝트에

#import "AppDelegate.h" 

@implementation AppDelegate 

@synthesize window = _window; 

@synthesize time; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSDate * startTime = [NSDate date]; 
    time = [[NSDate date] timeIntervalSinceDate: startTime]; 

    NSLog(@"Return time %f",[self returnTime]); 
    NSLog(@"Log time %f", [self logTime]); 
} 

- (double) returnTime { 
    return time; 
} 

- (double) logTime { 
    return time; 
} 

@end 

복사이 코드는 응용 프로그램을 실행하고이 제대로 실행 볼 수 있습니다. 내 컴퓨터에서 콘솔 출력은 다음과 같습니다

2012-06-21 20:02:17.832 test[298:403] Return time 0.000003 
2012-06-21 20:02:17.833 test[298:403] Log time 0.000003 

이 코드 문제가 될 수있는 여러 가지가 있지만 이들 중 대부분은 더 이상 코드를 보지 않고 단지 추측이다. 먼저 mainViewController의 인스턴스를 Phillip Mills (nib 파일에 인스턴스를 가질 수 있고 nibs 파일 소유자와 같은 인스턴스를 전달할 수 있음)로 여러 인스턴스를 가질 수 있습니다. 이는 전달중인 메소드를 호출하고 있음을 의미합니다. 다른 시간 변수들.

또한 응용 프로그램이 time 변수를 지속적으로 업데이트한다고합니다. 우선,이 업데이트를 실행시키는 것은 무엇입니까? 둘째, 변수가 지속적으로 업데이트되는 경우 변수가 두 메서드 호출간에 업데이트 될 수 있었던 것과 동일한 값을 반환하지는 않습니다.

참고 : 코드에 약간의 오류가 있습니다.이 라인 :

NSLog ("for some reason, this one is working and returns a value %f", time); 

될 (@ 기호를 통지)해야합니다

NSLog (@"for some reason, this one is working and returns a value %f", time); 

내가 나서서 내가 코드 원으로이 문제라고 생각하지 않는 한이 문제를 해결하기 위해 귀하의 게시물을 수정 @ 기호가 생략되면 내 컴퓨터에서 컴파일되지 않습니다.

관련 문제