سؤال

أنا النامية تطبيق اي فون التي أريد أن تظهر أقرب المطاعم استنادا إلى الموقع الحالي على أن في applicationDidFinishLaunching أنا أفعل هذا :

self.locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];



    NSURL *url = [[NSURL alloc] initWithString:@"http://192.168.0.150/server1/Service.asmx/nearest?lat1=23.013163&lon1=72.559068"];
    NSMutableURLRequest* request2=[NSMutableURLRequest requestWithURL:url];
    [request2 setHTTPMethod:@"GET"]; 
    [request2 setTimeoutInterval:10];
    NSURLResponse *response=nil;
    NSError *err=nil;
    NSData *data1=[[NSURLConnection sendSynchronousRequest:request2 returningResponse:&response error:&err] retain];
    if(data1 == nil)
    {
        UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"The network is not available.\n Please check the Internet connection." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];

    }
    else
    {
        NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data1];

        //Initialize the delegate.
        XMLParser *parser = [[XMLParser alloc] initXMLParser];

        //Set delegate
        [xmlParser setDelegate:parser];

        //Start parsing the XML file.
        @try {
            BOOL success = [xmlParser parse];
            if(success)
                NSLog(@"No Errors");
            else
                NSLog(@"Error Error Error!!!");
        }
        @catch (NSException * e) {
            NSLog(@"Exception in parsing %@  %@",[e name], [e reason]);
        }
    }

المشكلة السيناريو.

موقع مدير بدء تحديث الموقع

خدمة ويب يعدم قبل ذلك لذلك لا أستطيع الحصول على الموقع القيم .

أنا أنا أضع استدعاء خدمة ويب في المندوب الطريقة ثم تطلق التطبيق قبل خدمة ويب يعدم.في مندوب طريقة أنا من وضع خطوط الطول والعرض في السلاسل.

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

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

المحلول

وCLLocationManaged لديه طريقة مندوب.

<اقتباس فقرة>
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

وسوف يتم استدعاؤها عند CLLocationManager سوف تتلقى بعض الإحداثيات. أو

<اقتباس فقرة>
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

وسوف يتم استدعاؤها عند لا يمكن locationManager تلقي أي الإحداثيات. أو عندما المستخدم لا تسمح للعثور على الموقع الحالي. أيضا يجب الاتصال stopUpdatingLocation إذا كنت لا تريد تلقي نتائج أكثر دقة.

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

نصائح أخرى

شيء واحد أود أن أوصى هو أن تفعل urlRequest في الموضوع بدلا كما ألمح Sixten أوتو.

أود أن الإعداد locationManager في viewDidLoad أو viewDidAppear مثل لديك.ثم هناك طريقتان يمكن أن أسميه urlrequest:

  1. وقد طلب أن يؤديها في didUpdateToLocation مندوب, ثم سوف تعرف أن urlrequest لن ينفذ إلا بعد الموقع وجدت.هذا هو اقتراح بأن المريون مصنوعة.

  2. الطريقة الأخرى هي أن يكون الإخطار في didUpdateToLocation مندوب بحيث عند الموقع وجدت أنه يخطر وظيفة لأداء urlRequest.تبدو هذه البرنامج التعليمي إعداد الإخطارات ، فإنه من المفيد جدا و من الجيد أن نعرف عن الكثير من البرامج.

أيضا ، كما ذكرت من قبل, يجب إجراء urlrequest في الموضوع.والسبب هو طلبك يمكن أن يحبس المستخدم الخاص بك لن يكون لها أي سيطرة على الخروج من الطلب.فعل هذا الإعداد NSOperation ووضعه في NSOperationQueue:

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget: self 
                                                                                selector: @selector(METHOD:) 
                                                                                  object: OBJECTorNIL;
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        [queue addOperation:operation];

لمزيد من خيوط المعلومات ، انظر هذا البرنامج التعليمي

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