为什么我的方法为同一个变量返回不同的值

时间:2012-06-20 21:00:42

标签: objective-c cocoa

我有一个叫做时间的双倍。我无法确定为什么我可以将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];

3 个答案:

答案 0 :(得分:1)

你的“其他班级”第一次要求self.mainViewController,它会创建一个新的。我在这里猜测,但是,因为它被称为MainViewController,在“其他类”创建自己的新类之前,可能已经存在其中一个。

第一个MainViewController可能是更新发生的地方。

答案 1 :(得分:0)

您在函数声明中声明函数返回类型为double的变量,但您从未放入返回类型为double的值的return语句。

希望这有帮助!

答案 2 :(得分: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 Mills 中提及mainViewController的多个实例(您可以在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);

我继续编辑你的帖子以纠正这个问题,因为我不认为这是问题,因为如果@符号被忽略,代码甚至无法在我的机器上编译。