导致“方法'foo'在类'Bar'中定义并且在AppCode中不可见”的原因

时间:2016-12-06 23:49:31

标签: ios objective-c appcode

考虑以下方法:

- (void)sendEvent:(UIEvent *)event
{
    NSSet *allTouches = [event allTouches];

    if ([allTouches count] > 0)
    {
        _lastUserTouchTime = [[NSDate date] timeIntervalSince1970];
    }

    [super sendEvent:event];
}

[event allTouches]在AppCode 2016.3中生成以下检查警告。

  

“方法'allTouches'在类'UIEvent'中定义,不可见”

allTouches在< UIKit / UIEvent.h> 中定义,我尝试过这包括无效。 Xcode对这段代码似乎没有任何问题。有人对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

那是因为allTouches被定义为属性

看看这段代码:

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIEvent : NSObject
...
#if UIKIT_DEFINE_AS_PROPERTIES
@property(nonatomic, readonly, nullable) NSSet <UITouch *> *allTouches;
#else
- (nullable NSSet <UITouch *> *)allTouches;
#endif
...
@end

iOS SDK的更高版本使用属性而不是方法。并且,AppCode比Xcode具有更严格的类型检查。这就是Xcode静默编译和AppCode发出警告

的原因