Как проверить доступность сервера
Возможный дубликат:
Неопределенные символы для архитектуры 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;
}