سؤال

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

إليك ما أقوم به:

أقضيت تطبيق اختبار أساسي للغاية، ليس له شيء تقريبا فيه. في applicationDidFinishLaunching أضف مكالمة إلى وظيفتي، اختبار، وهو هنا:

- (void) test
{
 CLLocationManager *mLM;

 mLM = [[CLLocationManager alloc] init];
 mLM.delegate = self;

 if ( [mLM locationServicesEnabled] )
 {
  [mLM startUpdatingLocation];
 }
}

أساليب مفوضي بسيطة جدا أيضا:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
 [manager stopUpdatingLocation];
 [self sendRequest]; // succeeds
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
 [manager stopUpdatingLocation];
 [self sendRequest]; // fails
}

أخيرا، إليك SendRequest:

- (void) sendRequest
{
 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
 [request setURL:[NSURL URLWithString:@"https://theurl"]];  // this is actually a valid URL, changed here for privacy
 [request setHTTPMethod:@"GET"];
 [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];

 NSString    *unpw   = @"username:password";
 NSString    *base64 = [NSString base64StringFromString:unpw];
 [request addValue:[NSString stringWithFormat:@"Basic %@", base64] forHTTPHeaderField:@"Authorization"];

 NSURLResponse *response = nil;
 NSError    *error = nil;
 NSData    *respdata = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

 [request release];
}

دعوة إلى sendSynchronousRequest معلقة. هذا كان محبط للغاية. هل لدى أي شخص أي أفكار؟

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

المحلول

هذا سيعمل عليه السحر. تأكد من أن MLM هو Varialble فصولك، حتى تتمكن من ذلك:

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
 [self.mLm release];
 self.mLM = [[CLLocationManager alloc] init];
 self.mLM.delegate = nil;

 [self sendRequest]; // fails - This time it will work!!!
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top