【问题标题】:Sending Parameter to Method - NSTimeInterval向方法发送参数 - NSTimeInterval
【发布时间】:2013-03-18 02:21:59
【问题描述】:

我正在尝试将 NSTimeInterval 从在后台线程上运行的方法发送到将在主线程上运行的方法。不幸的是,我收到了这个错误:

Sending 'NSTimeInterval' (aka 'double') to parameter of incompatible type 'id'

这是我的代码 - 知道出了什么问题吗?

首先,我设置我的 NSTimerInterval,然后调用 performSelectorOnMainThread:

NSTimeInterval delayBetweenIntAdsNSTimeInterval = [responseStringTimeBetweenAds doubleValue];
[self performSelectorOnMainThread:@selector(startTimerForAds:) withObject:delayBetweenIntAdsNSTimeInterval waitUntilDone:NO];

这是我正在调用的方法的代码:

-(void)startTimerForAds:(NSTimeInterval)intervalBetweenAds {
}

你有什么想法吗?

谢谢,

更新

我打电话:

[self performSelectorOnMainThread:@selector(startTimerForAds:) withObject:@(delayBetweenIntAds) waitUntilDone:NO];

这是那个方法:

-(void)startTimerForAds:(NSInteger *)intervalBetweenIntAdsInteger {
}

但是通过那个调用(通过对象),XCode 显示:

Illegal type 'NSInteger *' (aka 'int *') used in a boxed expression

它显示在 [intervalBetweenIntAdsInteger doubleValue] 上:

Bad receiver type 'NSInteger *' (aka 'int *')

【问题讨论】:

  • 什么是 responseStringTimeBetweenAds ?字符串?
  • 是的,responseStringTimeBetweenAds 是一个包含整数的字符串,所以我使用 doubleValue 将该整数转换为双精度
  • NSTimeInterval 不是一个对象。试试 NSNumber。
  • @DigiMonk - 你是说发送 NSNumber 并在我发送 NSNumber 的方法中将其转换为 NSTimeInterval 吗?
  • 是的,因为 NSTimeInterval 不是一个对象。看看我的回答,希望有用

标签: iphone objective-c methods parameters


【解决方案1】:

NSTimeInterval 不是一个对象。试试 NSNumber,应该可以:

NSTimeInterval delayBetweenIntAdsNSTimeInterval = [responseStringTimeBetweenAds doubleValue];
[self performSelectorOnMainThread:@selector(startTimerForAds:) withObject:@(delayBetweenIntAdsNSTimeInterval) waitUntilDone:NO];


-(void)startTimerForAds:(NSNumber *)intervalBetweenAds {

     NSTimeInterval i = [intervalBetweenAds doubleValue];

}

因您的更新而更新:

[self performSelectorOnMainThread:@selector(startTimerForAds:) withObject:@(delayBetweenIntAds) waitUntilDone:NO];

-(void)startTimerForAds:(NSNumber *)intervalBetweenAds {
     int i = [intervalBetweenAds intValue];
}

【讨论】:

  • @DigiMong - 当我将其更改为 NSIntegers 时,这现在不起作用 - 只需使用附加位更新原始问题
  • 所以不能让它发送NSInteger?看起来很傻,但没关系 - 必须使用 NSNumbers - 这也似乎效率低下,不得不创建另一个变量!
  • 你不必创建额外的变量,你可以使用 NSNumber 的方法。如果您担心效率,请深入挖掘。
猜你喜欢
  • 2021-01-28
  • 2012-02-26
  • 2013-07-24
  • 2015-10-23
  • 1970-01-01
  • 2016-01-25
  • 2015-03-27
  • 1970-01-01
  • 2016-09-25
相关资源
最近更新 更多