【问题标题】:Perform selector with bool property使用 bool 属性执行选择器
【发布时间】:2015-07-21 00:41:55
【问题描述】:

我想实现这样的东西

 [self perform Selector:@selector(setEarlierMessagesIsLoading:) withObject:@YES afterDelay:1];

但它不起作用。为什么?有可能吗?

解决

 [self perform Selector:@selector(setEarlierMessagesIsLoading:) withObject:YES afterDelay:1];

【问题讨论】:

  • 您正在向setEarlierMessagesIsLoading: 方法发送一个NSNumber 实例
  • 定义“不工作”。显示您的 setEarlierMessagesIsLoading: 方法。说明与您预期发生的情况相比正在发生的情况。
  • 您的“决议”无效。不要按照你的建议去做。
  • 您的“决议”无效。试试我的答案,不要靠猜测来做事。

标签: objective-c


【解决方案1】:

首先,@YES 不是 BOOL 值,它是 NSNumber 的一个实例。

所以如果你想得到一个布尔值,你必须把它转换成一个布尔值。

在你的选择器中

- (void)setEarlierMessagesIsLoading:(NSNumber *)isLoading {
    if([isLoading boolValue]) {
        NSLog(@"Is it loading? YES");
    }else {
        NSLog(@"Is it loading? NO");
    }
}

【讨论】:

  • 不要这样编码你的if/else。相反,只需执行:if ([isLoading boolValue]) { // YES } else { // NO }。切勿直接将 BOOL 值与 YESNO 进行比较。
  • @rmaddy 感谢您指出我的不足。你真棒。
【解决方案2】:

我猜你的方法是这样的:

- (void)setEarlierMessagesIsLoading:(BOOL)isLoading;

改为:

- (void)setEarlierMessagesIsLoading:(NSNumber *)isLoading;

因为您发送的是 NSNumber * 而不是 BOOL。

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 2011-06-19
    • 2021-01-31
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多