0

私は二重に呼ばれる時間があります。double を別のクラスのメソッドに渡すことができる理由を判断できませんが、同じメソッドが存在するクラスからその 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];
4

3 に答える 3

1

「他のクラス」が初めて要求するとself.mainViewController、新しいクラスが作成されます。私はここで推測していますが、それはと呼ばれているので、MainViewController「他のクラス」が独自の新しいクラスを作成する前に、おそらくすでにそれらの1つが存在しています。

その最初MainViewControllerは、更新が行われている場所である可能性があります。

于 2012-06-20T22:34:17.500 に答える
0

あなたのコードは完全なストーリーを語っていません。あなたのコードを新しいココア アプリケーションに複製しました。いくつかの小さな違いがありますが、ロジックは変更されていません。

AppDelegate.hはこのように見えます:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (nonatomic) double time;

@property (assign) IBOutlet NSWindow *window;

@end

AppDelegate.m次のようになります。

#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

このコードを新しい cocoa プロジェクトにコピーしてアプリを実行すると、正しく実行されることがわかります。私のマシンでは、コンソール出力は次のようになります。

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

コードに問題がある可能性があることは多数ありますが、これらのほとんどは、それ以上のコードを確認していない憶測にすぎません。まず、Phillip MillsmainViewControllerが言及したように複数のインスタンスを持つことができます (たとえば、nib ファイルにインスタンスを持ち、インスタンスに nib ファイルの所有者を渡すこともできます)。これは、異なる時間変数を返すメソッドを呼び出していることを意味します。 .

また、アプリケーションが時間変数を継続的に更新しているとも言います。まず、今回の更新のきっかけは何ですか?第 2 に、変数が継続的に更新されている場合、2 つのメソッド呼び出しの間に変数が更新された可能性があるため、同じ値を返す可能性は低いです。

注: コードにも小さなエラーがありました。この行:

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);

@記号が省略されているとコードが私のマシンでコンパイルされないため、これが問題ではないと思うので、投稿を編集してこれを修正しました。

于 2012-06-21T19:09:12.270 に答える
0

関数宣言で、関数が type の変数をdouble返すことを述べていますが、 type の値を返す return ステートメントを挿入していませんdouble

お役に立てれば!

于 2012-06-20T21:04:32.700 に答える