سؤال

تم تغيير SOCATIONServicesEnabled من خاصية إلى طريقة.

تم إهمال هذا:

CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}

الآن يجب أن أستخدم:

if (![CLLocationManager locationServicesEnabled]) {
    // ...
}

أريد دعم أجهزة iOS 3 و iOS 4. كيف يمكنني التحقق من ذلك على أجهزة iOS 3 والتخلص من التحذير المنخفض؟

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

المحلول

محاولة:

BOOL locationServicesEnabled;
CLLocationManager locationManager = [CLLocationManager new];
if( [locationManager respondsToSelector:@selector(locationServicesEnabled) ] )
{
    locationServicesEnabled = [locationManager locationServicesEnabled];
}
else
{
    locationServicesEnabled = locationManager.locationServicesEnabled;
}

كإصلاح/العمل حولها.

سيؤدي استخدام المعرفة المترجمة إلى حدوث مشكلات عند استخدام الحد الأدنى لمدى النشر للسماح بإصدارات نظام التشغيل الأقدم الوصول إلى التطبيق الخاص بك.

نصائح أخرى

نظرًا لأن الخاصية "SolicationServicesEnabled" تم إهمالها فقط ، فهي لا تزال متاحة للاستخدام (لمقدار الوقت غير المحدد). للتعامل مع الموقف ديناميكيًا ، تحتاج إلى توفير حل دفاعي. على غرار الحل أعلاه ، استخدمت:

BOOL locationAccessAllowed = NO ;
if( [CLLocationManager instancesRespondToSelector:@selector(locationServicesEnabled)] )
{
    // iOS 3.x and earlier
    locationAccessAllowed = locationManager.locationServicesEnabled ;
}
else if( [CLLocationManager respondsToSelector:@selector(locationServicesEnabled)] )
{
    // iOS 4.x
    locationAccessAllowed = [CLLocationManager locationServicesEnabled] ;
}

تتخلى الدعوة إلى "InstancesRespondToSelector" لمعرفة ما إذا كان العقار لا يزال متاحًا ، فأنا أتحقق من أن الفئة نفسها تدعم استدعاء الطريقة (كونها طريقة ثابتة ، فسيقوم بالإبلاغ عن نعم).

مجرد خيار آخر.

مجهزة:

#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_1
  #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_2
    if (![CLLocationManager locationServicesEnabled]) {
    // ...
    }
  #else
    CLLocationManager *manager = [[CLLocationManager alloc] init];
    if (manager.locationServicesEnabled == NO) {
       // ...
    }
  #endif
#else
CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}
#endif
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top