我有一个叫做时间的双倍。我无法确定为什么我可以将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];
答案 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);
我继续编辑你的帖子以纠正这个问题,因为我不认为这是问题,因为如果@符号被忽略,代码甚至无法在我的机器上编译。