0

我有一个双重时间。我无法确定为什么我可以将双精度传递给另一个类中的方法,但是同一方法不能从它所在的类中请求所述双精度。

我的头文件看起来像这样:

@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,因此在“其他类”创建自己的新类之前可能已经存在其中一个。

首先MainViewController可能是更新发生的地方。

于 2012-06-20T22:34:17.500 回答
0

您在函数声明中声明该函数返回一个 type 的变量double,但您从未在 return 语句中添加一个返回 type 的值double

希望这可以帮助!

于 2012-06-20T21:04:32.700 回答
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 文件中有一个实例,并且还可以传入 nibs 文件所有者的实例),这意味着您正在调用传递回不同时间变量的方法.

您还说您的应用程序不断更新时间变量。首先,是什么触发了这个更新?其次,如果变量不断更新,则不太可能返回与在两次方法调用之间可能已更新变量相同的值。

注意:您的代码中还有一个小错误。这一行:

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 回答