5

Uygulamamın arka plan modundan sonlandırılması ve daha sonra herhangi bir önemli konum değişikliğinin meydana gelmesi durumunda arka plan modunda başlaması gerekliliğine ihtiyacım var. Yeni bir olay gelirse İşte tam bu hizmeti başlatırsanız startMonitoringSignificantLocationChangesUygulamayı, konum değişikliğindeki arka planda yeniden başlatabilir miyiz? zorlamadan sonra arka plandan çıkın

ait belgelerde belirtilen ve uygulama sonradan sonlandırıldı olduğunu budur, sistem otomatik içine arka planı uygulamayı yeniden başlatır. Böyle bir durumda, sözlüğü uygulamasına iletilen seçenekler: uygulama temsilciniz için didFinishLaunchingWithOptions: yöntemi, uygulamanızın bir konum olayı nedeniyle başlatıldığını belirtmek için UIApplicationLaunchOptionsLocationKey anahtarını içerir. Yeniden başlatıldığında, hala bir konum yöneticisi nesnesini yapılandırmanız ve konum olaylarını almaya devam etmek için bu yöntemini çağırmanız gerekir. konum hizmetlerini yeniden başlattığınızda, geçerli olay hemen temsilci teslim edilir. Ayrıca, konum hizmetinize başlamadan önce konumunuzun konum özelliğinin yönetici nesnesinin konum özelliğinin en son konum nesnesi olan ile doldurulur.

yüzden ben oraya buraya dolaşım sonra konumumu değiştirmeye çalışmış olsa arka plan modunda bu da onun olmamak yeniden başlatmasını sonra bu kodu

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

if ([CLLocationManager significantLocationChangeMonitoringAvailable]) { 
     // Stop normal location updates and start significant location change updates for battery efficiency. 
     [viewController.locationManager stopUpdatingLocation]; 
     [viewController.locationManager startMonitoringSignificantLocationChanges]; 

     //NSLog(@"significantLocationChangeMonitoringAvailable."); 
    } 
    else { 
     //NSLog(@"Significant location change monitoring is not available."); 
    } 
} 

koydu.

Burada eksik veya yanıltıcı olan nedir? uygulama arka planda tekrar açılmıyor

Herhangi bir öneriniz var mı? Ben olduğum için hemen I googling itibaren kazasında günlüğüne

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0: 
0 libsystem_kernel.dylib   0x3ba3feb4 mach_msg_trap + 20 
1 libsystem_kernel.dylib   0x3ba40048 mach_msg + 36 
2 CoreFoundation     0x337ff040 __CFRunLoopServiceMachPort + 124 
3 CoreFoundation     0x337fdd9e __CFRunLoopRun + 878 
4 CoreFoundation     0x33770eb8 CFRunLoopRunSpecific + 352 
5 CoreFoundation     0x33770d44 CFRunLoopRunInMode + 100 
6 Foundation      0x34093f92 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 250 
7 AppNm      0x0010a6a4 0xe4000 + 157348 
8 AppNm      0x000efc2a 0xe4000 + 48170 
9 AppNm      0x000e9796 0xe4000 + 22422 
10 CoreLocation     0x33cd1064 -[CLLocationManager onClientEventLocation:] + 2244 
11 CoreLocation     0x33cc8eaa __CLClientInvokeCallback_block_invoke_0 + 62 
12 CoreFoundation     0x337ff6ae __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 10 
13 CoreFoundation     0x337fed80 __CFRunLoopDoBlocks + 156 
14 CoreFoundation     0x337fdca8 __CFRunLoopRun + 632 
15 CoreFoundation     0x33770eb8 CFRunLoopRunSpecific + 352 
16 CoreFoundation     0x33770d44 CFRunLoopRunInMode + 100 
17 GraphicsServices    0x373492e6 GSEventRunModal + 70 
18 UIKit       0x356862fc UIApplicationMain + 1116 
19 AppNm      0x000e5854 0xe4000 + 6228 
20 AppNm      0x000e57a4 0xe4000 + 6052 

Thread 1 name: Dispatch queue: com.apple.libdispatch-manager 
Thread 1: 
0 libsystem_kernel.dylib   0x3ba40648 kevent64 + 24 
1 libdispatch.dylib    0x3b970974 _dispatch_mgr_invoke + 792 
2 libdispatch.dylib    0x3b970654 _dispatch_mgr_thread$VARIANT$mp + 32 

Thread 2: 
0 libsystem_kernel.dylib   0x3ba50d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b99ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b99ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b99e8a0 start_wqthread + 4 

Thread 3 name: WebThread 
Thread 3: 
0 libsystem_kernel.dylib   0x3ba500fc __psynch_mutexwait + 24 
1 libsystem_c.dylib    0x3b999124 pthread_mutex_lock + 388 
2 WebCore       0x39786418 _WebTryThreadLock(bool) + 184 
3 WebCore       0x3978634a WebRunLoopLock(__CFRunLoopObserver*, unsigned long, void*) + 42 
4 CoreFoundation     0x337ff6ca __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18 
5 CoreFoundation     0x337fd9bc __CFRunLoopDoObservers + 272 
6 CoreFoundation     0x337fdde8 __CFRunLoopRun + 952 
7 CoreFoundation     0x33770eb8 CFRunLoopRunSpecific + 352 
8 CoreFoundation     0x33770d44 CFRunLoopRunInMode + 100 
9 WebCore       0x39784500 RunWebThread(void*) + 440 
10 libsystem_c.dylib    0x3b9a930e _pthread_start + 306 
11 libsystem_c.dylib    0x3b9a91d4 thread_start + 4 

Thread 4 name: com.apple.NSURLConnectionLoader 
Thread 4: 
0 libsystem_kernel.dylib   0x3ba3feb4 mach_msg_trap + 20 
1 libsystem_kernel.dylib   0x3ba40048 mach_msg + 36 
2 CoreFoundation     0x337ff040 __CFRunLoopServiceMachPort + 124 
3 CoreFoundation     0x337fdd9e __CFRunLoopRun + 878 
4 CoreFoundation     0x33770eb8 CFRunLoopRunSpecific + 352 
5 CoreFoundation     0x33770d44 CFRunLoopRunInMode + 100 
6 Foundation      0x340bd3d0 +[NSURLConnection(Loader) _resourceLoadLoop:] + 304 
7 Foundation      0x34140e80 __NSThread__main__ + 968 
8 libsystem_c.dylib    0x3b9a930e _pthread_start + 306 
9 libsystem_c.dylib    0x3b9a91d4 thread_start + 4 

Thread 5 name: com.apple.CFSocket.private 
Thread 5: 
0 libsystem_kernel.dylib   0x3ba50594 __select + 20 
1 CoreFoundation     0x338031f2 __CFSocketManager + 674 
2 libsystem_c.dylib    0x3b9a930e _pthread_start + 306 
3 libsystem_c.dylib    0x3b9a91d4 thread_start + 4 

Thread 6: 
0 libsystem_kernel.dylib   0x3ba50d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b99ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b99ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b99e8a0 start_wqthread + 4 

Thread 7: 
0 libsystem_kernel.dylib   0x3ba50d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b99ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b99ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b99e8a0 start_wqthread + 4 

Thread 8: 
0 libsystem_kernel.dylib   0x3ba50d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b99ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b99ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b99e8a0 start_wqthread + 4 

Thread 9: 
0 libsystem_kernel.dylib   0x3ba50d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b99ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b99ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b99e8a0 start_wqthread + 4 

Thread 10: 
0 libsystem_kernel.dylib   0x3ba50d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b99ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b99ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b99e8a0 start_wqthread + 4 

Unknown thread crashed with unknown flavor: 5, state_count: 1 

ile arka planda tekrar açıldıktan sonra uygulama olmak kazasında olduğunu anladım

kadar çok denemeler sonrasında

DÜZENLEME 12July 2013 Değerlendirme sonucunda bırakılan nesneye güncelleme konumu gönderiliyor. Bunun için ben

if ([CLLocationManager significantLocationChangeMonitoringAvailable]) { 

//  if(!viewController.locationManager){ 
//   viewController.locationManager = [[CLLocationManager alloc] init]; 
//   viewController.locationManager.delegate = viewController; 
//   viewController.locationManager.distanceFilter = 200.0f; 
//   viewController.locationManager.desiredAccuracy = 200.0f; 
//  } 

     // Stop normal location updates and start significant location change updates for battery efficiency. 
     viewController.locationManager.delegate = nil; 
     [viewController.locationManager stopUpdatingLocation]; 
     viewController.locationManager.delegate = viewController; 
     [viewController.locationManager startMonitoringSignificantLocationChanges]; 

     NSLog(@"significantLocationChangeMonitoringAvailable."); 
    } 
    else { 

     NSLog(@"Significant location change monitoring is not available."); 
    } 

bu gidiyorum doğru yolu mı AppDelegate DidFinishlaunchingWithOptions kodunu değişti? Veya kilitlenme günlüğü başka bir şey mi gösteriyor?

+0

info.plist'inizi yapılandırdınız mı? Simülatörde veya cihazda test yapmak? – Wain

+0

info.plist'i 'Gerekli Arkaplan Modları 'tuşu ile yapılandırdım ->" Konum güncellemeleri için uygulama kaydediliyor " – Heena

+0

Cihazla test etme.Uygulama güncellemesini almak için etrafta gezindikten sonra arka plandan da uygulamayı kaldırdım.but didn' Uygulamamın arka planda yeniden başlatılmasını sağla – Heena

cevap

0

Şu anda uygulamanızın konumuna göre davranış durumu viewController numaralı telefondan alınabiliyor. MVC'nin "V" ve "C" bölümlerini birleştirdiniz. Görünüm denetleyicinizden CLLocationManager'u çekip AppDelegate'inizde bir özellik olarak ayarlamayı düşünürdüm. Bu şekilde, konum değişikliklerine tepki vermek için bir görünüm denetleyicisini başlatmak zorunda kalmazsınız ve uygulamanızda başka yerlere erişmek için bir model oluşturur. Önce locationMananger'u yapılandırın, daha sonra viewController ürününüze aktarın.

0

AppDelegate

(void)applicationDidBecomeActive:(UIApplication *)application 
{ 

    if ([CLLocationManager significantLocationChangeMonitoringAvailable]) { 

     [viewController.locationManager stopMonitoringSignificantLocationChanges]; 
    } 

    if ([CLLocationManager locationServicesEnabled]) 
    { 

     [viewController.locationManager startUpdatingLocation]; 
    } 

} 

(void)applicationDidEnterBackground:(UIApplication *)application 
{ 

    [viewController.locationManager stopUpdatingLocation]; 
    [viewController.locationManager startMonitoringSignificantLocationChanges]; 



} 

ViewController.m

locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.pausesLocationUpdatesAutomatically = NO; 
locationManager.distanceFilter = 300; 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[locationManager startUpdatingLocation]; 
İlgili konular