【问题标题】:Converting an NSNumber to NSTimeInterval将 NSNumber 转换为 NSTimeInterval
【发布时间】:2013-06-20 10:31:57
【问题描述】:

我已将 NSTimeInterval 转换为 NSNumber,以便将其存储在 NSUserDefaults 中。我使用了这样的 numberWithDouble 方法:

NSNumber *savedTime = [NSNumber numberWithDouble:timeInterval];

我正在另一个视图中检索信息,但遇到了问题。该数字似乎不想正确转换。我知道号码在结转,因为我可以查看此标签中的号码,并且它正确显示:

timeLabel.text = [NSString stringWithFormat:@"%f", [[[userDefaults objectForKey:groupTitleForReference] objectForKey:@"time"] doubleValue]];

但是当我将间隔设置为双精度值时,它不起作用。我正在使用这个:

interval = [[[userDefaults objectForKey:groupTitleForReference] objectForKey:@"time"] doubleValue];

所有变量都在标头中正确声明。知道为什么它不起作用吗?

谢谢,

大卫

【问题讨论】:

  • 在什么意义上“它不起作用”,确切地说?
  • 什么“不起作用”?你能告诉我们interval在那一行之后是什么吗?
  • 您能否准确说明您的转换问题是什么?因为“不起作用”是不言自明的
  • 不起作用,因为它试图读取为 0。我已检查以评估该值是什么数字。如果值为 0,则会发出警报。警报立即消失。
  • Multimer[27707:c07] 6.000000 是它在我的 nslog 中的显示方式,使用 %f 作为格式说明符

标签: objective-c type-conversion nsnumber nstimeinterval


【解决方案1】:

在这两种情况下,您都使用

[[[userDefaults objectForKey:groupTitleForReference] objectForKey:@"time"] doubleValue]

获取double 值。您需要专注于可能有所不同的地方。离开我的头顶,看看:

  • interval 是否正确声明为doubleNSTimeInterval?向我们展示您如何以及在何处声明 interval
  • 当您显示interval 以检查其值时,您是否正确显示它。众所周知,我这样做是偶然的

    NSTimeInterval interval = ....
    NSLog(@"%@", interval);
    

    向我们展示您用于检查间隔及其输出的代码。

  • userDefaults 是否已更改?

  • groupTitleForReference 已更改。

编辑

另一件事要检查

  • 如果interval 是全局变量,请确保标头中的声明格式为

    extern NSTimeInterval interval;
    

    如果您省略 extern,您将在每个包含标题的文件中获得一个名为 interval 的单独变量。

【讨论】:

  • 杰里米,感谢您的回复。要回答您的问题: 1. 我尝试使用双精度值直接分配 NSTimeInterval 并在其上方声明双精度并从该双精度分配 NSTimeInterval。两种方法都行不通。 2. 当我 NSLog 间隔时,我使用 %f 格式说明符,它正确显示。如果我使用双重说明符,它也会正确显示。 3. userDefaults 没有改变。没有更改任何声明,唯一的区别是我传递的是 NSNumber 而不是 NSTimeInterval。
  • 4. groupTitle 没有改变。它是动态的,具体取决于用户在前一个视图的表中选择的选项。如果我直接从我设置的单例传递 nstimeinterval,则代码可以正常运行,但如果我只传递一个 float 或 double 并尝试将其转换为 nstimeinterval,则它不起作用。我希望这是有道理的。我还在学习,我的目标 c 课程只有几个月时间
  • 如果你用 %f NSLog 并且它是正确的,那么就没有错。为什么你认为你有问题?
  • 有一个问题,因为我的代码没有注册间隔有一个值。这段代码在不应该被立即命中时: if (interval == 0 || interval
  • 不,你还没有回答所有问题。你告诉我,当你 NSLog 间隔时,它是正确的,但是如果测试,它是不正确的。除非您没有告诉我们所有内容,否则没有可能会发生这种情况。 interval 声明在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 2010-11-24
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
相关资源
最近更新 更多