سؤال

تحديث: كما دائرة الرقابة الداخلية 5 و Xcode 4.1 هو الممكن الآن أن موقع الاختبار في محاكاة وحتى تحديد الطرق.انظر http://developer.apple.com للحصول على مزيد من التفاصيل.

إرث السؤال

هناك على أية حال لاختبار CoreLocation على اي فون محاكاة ؟

كل ما أطلبه هو أن يكون قادرا على تحديد موقع نفسي و CoreLocation إعادته.

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

المحلول 2

شكرا على ردود فعل كبيرة ، فقد دفعني إلى إيجاد حل قوية.

كل رمز يمكن العثور عليها هنا:

http://code.google.com/p/dlocation/

فمن جدا فوضوي ولكن كما قلت استخدامه سيكون أفضل بكثير.

كان الحل فرعية CLLocationManager وتحديد تفويض جديد @protocol, ، ودعا DLocationManagerDelegate.

وهي مصممة لتكون بسيطة قطرة في بديل CLLocationManagerDelegate التي تجمع إلى جدا طبقة رقيقة عند نشرها على فعلية الجهاز.

عند تشغيل الجهاز وسيعود البيانات كالمعتاد باستخدام CoreLocation, ولكن في محاكاة فإنه سيتم قراءة خطوط الطول والعرض من ملف نصي (تعريفها في DLocationManager.ساعة الملف).

آمل أن يساعد هذا التنفيذ على الجانب بسيطة وعليك أن startUpdatingLocation و stopUpdatingLocation لتحديث العرض.

التعليقات وردود الفعل سوف يساعد.

نصائح أخرى

هنا هو بلدي الإختراق بسيطة أن قوات CLLocationMager العودة على geocoords من باول التكنولوجيا المكتبة فقط على جهاز محاكاة:

#ifdef TARGET_IPHONE_SIMULATOR 

@interface CLLocationManager (Simulator)
@end

@implementation CLLocationManager (Simulator)

-(void)startUpdatingLocation {
    CLLocation *powellsTech = [[[CLLocation alloc] initWithLatitude:45.523450 longitude:-122.678897] autorelease];
    [self.delegate locationManager:self
               didUpdateToLocation:powellsTech
                      fromLocation:powellsTech];    
}

@end

#endif // TARGET_IPHONE_SIMULATOR

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

+ (CLLocation *) wakkawakka: (CLLocation*) loc {
#ifdef TARGET_IPHONE_SIMULATOR
    /* replace with a test instance */
    return [[CLLocation alloc] initWithLatitude:10.0 longitude:20.0];
#else
    return loc;
#endif
}

مشاكل إدارة الذاكرة جانبا...

أعتقد أن هناك آخر (أفضل IMHO) نهج من هنا subclassing CLLocationManager مثل في

http://code.google.com/p/dlocation/

في ObjectiveC يبدو أن من الممكن أن محل موجود طريقة من فئة دون تجاوز ذلك.هذا هو غالبا ما تسمى "طريقة swizzling" :يمكنك تحديد الفئة الخاصة بك الموجودة من تنفيذ الطريقة الحالية في ذلك.

من منظور العميل ، كل شيء شفاف : كان لديه شعور أنه يتعامل مع ريال مدريد CLLocationManager ولكن في الحقيقة أنت "تولى السيطرة من ذلك".بحيث أنه لا يحتاج للتعامل مع أي فئة فرعية أو أي مندوب البروتوكول :انه لا يكف عن استخدام نفس الفئة / بروتوكول واحد من CoreLocation.

هنا مثال على تولى السيطرة على تفويض العميل حقن :

 
@implementation CLLocationManager (simulator) 

-(void) setDelegate:(id)delegate { //your own implementation of the setDelegate... } -(id)delegate { //your own implementation of the delegate.... } -(void)startUpdatingLocation { } -(void)stopUpdatingLocation { } //.... //same for the rest of any method available in the standard CLLocationManager @end

ثم في هذا التنفيذ ، أنت حر للتعامل مع مرحلة ما قبل تحديد الإحداثيات (قادمة من ملف أيا كان) أن يكون "دفع" إلى تفويض باستخدام معيار CLLocationManagerDelegate البروتوكول.

الزناد الأساسية موقع الاسترجاعات من فئة الاختبار ، إذا كنت تحتاج إلى تعيين موقع آخر غير واحد محاكاة يعطيك.

على locationManager:didUpdateToLocation و locationManager:didFailedWithError مثقلة الاسترجاعات هي لم تسمى في اي فون محاكاة هذا غريب ، كل ما أحصل عليه هو 0.0000 على اللات ، و 0.0000 على لون.كما المنصب.في هذه الحالة يمكنك وضع شيء يصعب تنفيذ جميع الحالات الممكنة التي يمكن أن تحدث أثناء التعامل مع الموقع, فقط باستخدام بيئة محاكاة.

إذا كنت ترغب في تحديث الأزرق userLocation نقطة في MKMapView مع محاكاة تحديثات الموقع, تحقق من بلدي FTLocationSimulator في http://github.com/futuretap/FTLocationSimulator

يقرأ ملف KML التي تم إنشاؤها بواسطة برنامج Google Earth أن تقدم مستمر تحديثات الموقع.

اختبار CoreLocation على اي فون محاكي

1) لاختبار الموقع في محاكاة,أفضل طريقة هي استخدام ملفات GPX,اذهبوا إلى ملفات -> New -> موارد> ملف GPX.

2) بعد إضافة ملف GPX تحديث إحداثيات الموقع المطلوب.

3) مرة واحدة في ملف GPX إضافة إلى المشروع ، حدد مخطط -> تحرير مخطط -> تشغيل -> يسمح موقع المحاكاة.حدد موقع محاكاة حدد اسم ملف GPX الذي قمت بإنشائه.

بهذه الطريقة سوف محاكاة دائما اختيار المطلوب الإحداثيات التي يجب إضافتها في ملف GPX.

Create the GPX file

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top