Семантическое предупреждение по xcode 4
Я получаю семантическое предупреждение на Xcode 4:
* Объявление 'struct sockaddr_in' не будет видно за пределами этой функции *
структура, как представляется, объявляется в netinet/in.h
Предупреждение становится отмеченным на Reachability.h, его классе, который я загрузил из примеров Apple.
#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>
typedef enum {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
#define kReachabilityChangedNotification @"kNetworkReachabilityChangedNotification"
@interface Reachability: NSObject
{
BOOL localWiFiRef;
SCNetworkReachabilityRef reachabilityRef;
}
//reachabilityWithHostName- Use to check the reachability of a particular host name.
+ (Reachability*) reachabilityWithHostName: (NSString*) hostName;
//reachabilityWithAddress- Use to check the reachability of a particular IP address.
+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress;
//reachabilityForInternetConnection- checks whether the default route is available.
// Should be used by applications that do not connect to a particular host
+ (Reachability*) reachabilityForInternetConnection;
//reachabilityForLocalWiFi- checks whether a local wifi connection is available.
+ (Reachability*) reachabilityForLocalWiFi;
//Start listening for reachability notifications on the current run loop
- (BOOL) startNotifier;
- (void) stopNotifier;
- (NetworkStatus) currentReachabilityStatus;
//WWAN may be available, but not active until a connection has been established.
//WiFi may require a connection for VPN on Demand.
- (BOOL) connectionRequired;
@end
Я не понимаю предупреждения, может кто-нибудь объяснить это мне?
Спасибо.
Ответы
Ответ 1
Кто-то подал отчет об ошибке в отношении поведения и получил ответ от кого-то здесь. По сути, проблема в том, что вы объявляете новую структуру (насколько компилятор может сказать) в параметре метода, поэтому он не будет доступен где-либо еще.
Быстрое исправление. Просто добавьте следующую строку в Reachability.h
:
#import <netinet/in.h>
Ответ 2
Вы объявляете новую структуру в параметре метода, а не в области файлов.
Предупреждение исчезнет, если вы добавите объявление вперед в начале файла (где-то перед разделом @interface
).
struct sockaddr_in ;
Выполнение этого вместо #import <netinet/in.h>
позволяет избежать раздувания заголовка.
(Говоря о сокращении заголовка заголовка, вы можете сократить использование заголовка в Reachability.h
, заменив строки
#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>
с
#import <SystemConfiguration/SCNetworkReachability.h>
)
Ответ 3
Добавьте #import в Reachability.h, чтобы уйти от этого