Как проверить доступность сервера

Возможный дубликат:
Неопределенные символы для архитектуры armv7: "_SCNetworkReachabilityCreateWithAddress"

Я попробовал пару вещей, которые нашел здесь, и ничего не получилось. Я добавил в свой проект файлы reachability.h и.m от Apple. Я пытаюсь проверить достижимость сервера магната, и вот код, который я использовал в моей реальной программе:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification
object:nil];

reach = [Reachability reachabilityForInternetConnection];
[reach startNotifier];

NetworkStatus remoteHostStatus = [reach currentReachabilityStatus];

if (remoteHostStatus == NotReachable) {
    NSLog(@"no");
    textTest.text = @"Can't reach it";
}
else if(remoteHostStatus == ReachableViaWiFi || remoteHostStatus == ReachableViaWWAN){
    NSLog(@"Yes");
    textTest.text = @"Got it";
}
testServer.hidden = YES;

....

-(void)handleNetworkChange:(NSNotification *)notice{
    NetworkStatus remoteHostStatus = [reach currentReachabilityStatus];

    if (remoteHostStatus == NotReachable) {
        NSLog(@"no");
        textTest.text = @"Can't get it";
    }
    else if(remoteHostStatus == ReachableViaWiFi || remoteHostStatus == ReachableViaWWAN){
       NSLog(@"Got it");
       textTest.text = @"Got it";
    }
}

и в файле.h:

@property (retain, nonatomic) Reachability *reach;

....

-(void)handleNetworkChange:(NSNotification *)notice;

Каждый раз, когда я пытаюсь скомпилировать и запустить, вот что я получаю:

Ld /Users/ConorMccallion/Library/Developer/Xcode/DerivedData/newClient-aunayptutxnlhjeoflldefcmybpk/Build/Products/Debug-iphonesimulator/newClient.app/newClient normal i386
    cd /Volumes/TRAVELDRIVE/Reseaech/ClientSide/newClient
    setenv IPHONEOS_DEPLOYMENT_TARGET 6.0
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk -L/Users/ConorMccallion/Library/Developer/Xcode/DerivedData/newClient-aunayptutxnlhjeoflldefcmybpk/Build/Products/Debug-iphonesimulator -F/Users/ConorMccallion/Library/Developer/Xcode/DerivedData/newClient-aunayptutxnlhjeoflldefcmybpk/Build/Products/Debug-iphonesimulator -filelist /Users/ConorMccallion/Library/Developer/Xcode/DerivedData/newClient-aunayptutxnlhjeoflldefcmybpk/Build/Intermediates/newClient.build/Debug-iphonesimulator/newClient.build/Objects-normal/i386/newClient.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=6.0 -framework UIKit -framework Foundation -framework CoreGraphics -o /Users/ConorMccallion/Library/Developer/Xcode/DerivedData/newClient-aunayptutxnlhjeoflldefcmybpk/Build/Products/Debug-iphonesimulator/newClient.app/newClient

Undefined symbols for architecture i386:
  "_SCNetworkReachabilityCreateWithAddress", referenced from:
      +[Reachability reachabilityWithAddress:] in ViewController.o
      +[Reachability reachabilityWithAddress:] in Reachability.o
  "_SCNetworkReachabilityCreateWithName", referenced from:
      +[Reachability reachabilityWithHostName:] in ViewController.o
      +[Reachability reachabilityWithHostName:] in Reachability.o
  "_SCNetworkReachabilityGetFlags", referenced from:
      -[Reachability connectionRequired] in ViewController.o
      -[Reachability currentReachabilityStatus] in ViewController.o
      -[Reachability connectionRequired] in Reachability.o
      -[Reachability currentReachabilityStatus] in Reachability.o
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
      -[Reachability startNotifier] in ViewController.o
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilitySetCallback", referenced from:
      -[Reachability startNotifier] in ViewController.o
      -[Reachability startNotifier] in Reachability.o
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
      -[Reachability stopNotifier] in ViewController.o
      -[Reachability stopNotifier] in Reachability.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Это, вероятно, что-то очевидное, поэтому ответ будет принята с благодарностью. Спасибо

2 ответа

Решение

Если вы хотите проверить достижимость определенного хоста, вы можете использовать следующий код:

Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];

Здесь вы можете передать имя сервера в качестве имени хоста, чтобы проверить достижимость. Он должен работать. Проверьте документацию Apple для более подробной информации.

Для сообщения об ошибке, попробуйте добавить SystemConfiguration.framework к проекту. Если это не поможет, проверьте следующие неопределенные символы для архитектуры armv7: "_SCNetworkReachabilityCreateWithAddress".

На метод didFinishLaunchingWithOptions положите:

self.internetReach= [Reachability reachabilityWithHostName:@"your host name e.g.www.apple.com"];

[internetReach startNotifier];


[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];


[self performSelector:@selector(reachabilityChanged:) withObject:[NSNotification notificationWithName:kReachabilityChangedNotification object:internetReach]];

это вызовет метод ниже

- (void)reachabilityChanged:(NSNotification*)note

{

Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);

if(curReach == self.internetReach)
{
    NetworkStatus netStatus = [curReach currentReachabilityStatus];
    switch (netStatus)
    {
        case ReachableViaWiFi:
        {            
            isInternetConnectionAvilable=YES;
            if(isNetworkNotifierCalledOnce)
            {
                UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Message!" message:@"Internet Available Now" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alert show];
                [alert release];
            }
            break;
        }

        case NotReachable:
        {     

            isInternetConnectionAvilable=NO;

            UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Message!" message:@"No Internet Connectivity" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

            [alert show];

            [alert release];

            break;
        }
    }

}

isNetworkNotifierCalledOnce=YES;

}

Другие вопросы по тегам