سؤال

لقد وجدت العديد من الأمثلة على التعليمات البرمجية للقيام بما أريد (تحقق من عدم الرواد)، ولكن لا يبدو أي منهما دقيقا بما يكفي ليكون مفيدا لي. لا أستطيع معرفة سبب هذا لا يريد أن يلعب لطيفا.

لدي الوضوح. هل / م في مشروعي، أنا أفعل

#import <SystemConfiguration/SystemConfiguration.h>

ولدي الإطار المضافة. لدي أيضا:

#import "Reachability.h"

في الجزء العلوي من .m الذي أحاول استخدامه.

Reachability* reachability = [Reachability sharedReachability];
[reachability setHostName:@"http://www.google.com"];    // set your host name here
NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFiNetwork) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) {NSLog(@"cell"); }

هذا يعطيني كل أنواع المشاكل. ما الخطأ الذي افعله؟ أنا محسن على ما يرام، لدي صعوبة في الوقت المناسب عندما يتعلق الأمر بمعرفة ما يجب وضعه حيث يمكنك تمكين ما أريد القيام به، بغض النظر عما إذا كنت أريد أن أعرف ما أريد القيام به أم لا. (محبط للغاية)

تحديث: هذا هو ما يحدث. هذا في رأيي، وهذا لدي

#import <SystemConfiguration/SystemConfiguration.h>

و

#import "Reachability.h"

اقامة مع. هذا هو أقل جزء مفضل من البرمجة إلى حد بعيد.reachability problems
(مصدر: sneakyness.com.)


FWIW، لم ننتهي أبدا في تنفيذ هذا في التعليمات البرمجية لدينا. الميزات التي تتطلب الوصول إلى الإنترنت (دخول اليانصيب، وشراء DVD)، لم تكن ملامحا رئيسيا. لا شيء آخر مطلوب الوصول إلى الإنترنت.

بدلا من إضافة المزيد من التعليمات البرمجية، حددنا فقط خلفية وجهات نظر الإنترنت إلى إشعار يخبر المستخدمين أن تكون متصلا بالإنترنت لاستخدام هذه الميزة. كان في موضوع مع بقية واجهة التطبيق، وقد تم بشكل جيد / بذوق. قالوا إن شيئا عن ذلك أثناء عملية الموافقة، ومع ذلك، فقد حصلنا على مكالمة هاتفية شخصية للتحقق من أننا نتخلص من العناصر التي تتعلق فعلا بالفيلم. وفقا لاتفاقهم الغامض عادة، لا يسمح لك بإجراء اليانصيب خلاف ذلك.

وأعتقد أيضا أن هذا التمسك أكثر صرامة على "استخدام الأشياء فقط إذا كنت بحاجة مطلقا إليهم".

إليك رابط iTunes للتطبيق، Evoscanner.

هل كانت مفيدة؟

المحلول

من لقطة الشاشة، يبدو أنك لا تملك القدرة على الوصول إلى مشروعك. يجب عليك تنزيل الوصول إلى Apple:

https:/developer.apple.com/library/content/sampleecode/reachable/interroduction/intro.html.

وأضف كل من ملفات .h و .m إلى مشروعك.

تحديث: لاحظت أن لديك الوصول إلى الوصول. لكن بالنظر إلى أحدث إصدار، يمكنني أن أرى لماذا لديك الأخطاء التي تدرجها - لقد غيروا API وربما تستخدم نموذج التعليمات البرمجية التي وجدتها في مكان آخر. محاولة:

في ملف .h:

//import Reachability class
#import "Reachability.h"

// declare Reachability, you no longer have a singleton but manage instances
Reachability* reachability;

في ملف .m:

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

reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

 if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

.....

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

  NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

   if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }
}

نصائح أخرى

[reachability setHostName:@"http://www.google.com"];

انتباه! واجهت المشكلة التي "لا يمكن استخدامها دائما" إذا تم استخدام HTTP: // بادئة.

رافائيل

إليك الرمز المناسب لأنه يعمل بالنسبة لي اليوم !!!

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

reachability = [Reachability reachabilityForInternetConnection];

[reachability startNotifier];

NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];

if(remoteHostStatus == NotReachable) {NSLog(@"no");}
else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"cell"); }

هل لديك الكود التالي في أي مكان؟

[reachability startNotifier];

إذا كان رمز الوصول الخاص بك من مثال Apple، فأنت بحاجة إلى القيام بذلك قبل أن تتمكن من بدء تحديثات حالة الإبلاغ إليك.

غير هذا

reachability = [Reachability reachabilityForInternetConnection];

الى هذا

reachability = [[Reachability reachabilityForInternetConnection] retain];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top