【问题标题】:Getting error when trying to pass integer to method - iOS [closed]尝试将整数传递给方法时出错 - iOS [关闭]
【发布时间】:2013-12-04 20:52:10
【问题描述】:

我有一个 UIButton,按下它时会将一个整数传递给我设置的一个简单方法。但是我不断收到此错误:

Implicit conversion of 'int' to 'id' is disallowed with ARC

这是我的代码:

[self performSelector:@selector(show:) withObject:prev_image afterDelay:2.0];

我不只是在做[self show:prev_image] 的原因是因为我希望在调用该方法之前有一个延迟。

感谢您抽出宝贵时间,丹。

【问题讨论】:

  • 现在阅读performSelector:withObject:afterDelay:的文档。
  • prev_image 是 int 吗?
  • 是的 pref_image 是一个整数。我刚刚阅读了 performSelector:withObject:afterDelay 文档......所以我到底要如何传递一个 int??
  • 这个问题不值得像它收到的那么多反对票。

标签: ios cocoa-touch function methods int


【解决方案1】:

prev_image 是一个 int,其中必须将“对象”传递给 performSelector 方法。

我建议你这样做:

[self performSelector:@selector(show:) withObject:@(prev_image) afterDelay:2.0f];

我还建议您在使用 Objective-C 编程时将 prev_image 更改为 prevImage 只是为了样式。

这里没有必要使用dispatch_after,您几乎肯定希望在解决 iOS 开发问题时保持尽可能高的水平。

我很抱歉不清楚。

您还需要更改show: 的方法签名和实现

- (void)show:(NSNumber *)number
{
    NSInteger integerNumber = [number integerValue];
}

【讨论】:

  • 这还需要将show: 方法更改为采用NSNumber 而不是int。 GCD 并没有什么“低级”。它实际上比使用performWithSelector... 更加通用和有用。
  • 出色的解决方案人!我不会想到的。虽然我真的看不出使用 dispatch_after 有什么问题。
  • 使用dispatch_after没有问题,但我建议在解决方案允许的范围内保持高水平。
【解决方案2】:

一种解决方案是使用[NSNumber numberWithInt:prev_image] 而不是prev_image。此外,您还需要将 show: 方法更改为采用 NSNumber 而不是 int。

【讨论】:

  • 这还需要将show: 方法更改为采用NSNumber 而不是int
【解决方案3】:

你有两个选择:

  1. show: 方法更改为采用NSNumber,然后将prev_image 包装在NSNumber 中或
  2. 使用dispatch_after

代码:

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self show:prev_image];
});

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多