2013-10-02 1 views
6

La nostra app dispone di funzionalità di localizzazione basata su mappa e GPS. Questa app è già stata caricata su Apple Store. L'App contiene le seguenti caratteristiche:L'app si è arrestata in modo anomalo su iOS 7 per la funzionalità Mappa sviluppata utilizzando MKAnnotation, CGBitmapContextCreate e NSOperationQueue

  • mappa mostra i dati sul traffico in tempo reale mostra in tempo reale evento di traffico (infortuni, Ingorgo ecc)
  • dell'utente di posizione GPS di tracciamento L'applicazione funziona bene per le versioni iOS 5 e 6. Siamo di fronte al seguente problema di arresto anomalo per iOS 7 Beta durante l'utilizzo della funzionalità Mappa nell'app. Abbiamo usato le seguenti caratteristiche di iOS per rendere i dati di traffico e evento traffico sulla mappa:

  • MKAnnotation per rendere l'evento di traffico

  • Per rendere i dati di traffico, app utilizza la funzione CGBitmapContextCreate.

    context = CGBitmapContextCreate (NULL, 
               self.mapView.frame.size.width,              
               self.mapView.frame.size.height, 
               8,// bits per component 
               bitmapBytesPerRow, 
               colorSpace, 
               kCGImageAlphaPremultipliedLast); 
    
    CGContextSetAllowsAntialiasing (context,YES) 
    
  • Disegna la linea per visualizzare i dati sul traffico nel contesto Bitmap.

  • Il contesto bitmap creato verrà visualizzato sulla mappa utilizzando l'API MKAnnotation.

  • L'app utilizza NSOperationQueue per il rendering del traffico e dei dati degli eventi poiché l'interazione dell'utente con la mappa è scorrevole. Segue il frammento di codice:

    [queue addOperationWithBlock:^{ [Set the required data], [Update the UI] }]; 
    

seguito sono due resoconti di blocco che viene generato durante il funzionamento casuale n della funzionalità Map.

registro dei crash - 1

Incident

Identifier: 471EAE21-E118-4E3D-AAAE-D7D82B1D6326 

CrashReporter 

Key: 

bdbf75eb30240449214769478f38830aa7a14f7f 

Hardware 

Model:  iPhone5,2 

Process:    {Application Name} [246] 

Path:    /var/mobile/Applications/4FA0A7F2-4998-4F8F-A4C6-66D849D074B8/{Application Name}.app/{Application Name} 

Identifier:   {Application bunald name} 

Version:    X.X.X.X 

Code 

Type:   ARM (Native) 

Parent 

Process:  launchd [1] 

Date/Time:   2013-08-30 14:21:24.523 +0530 

OS 

Version:   iOS 7.0 (11A4449d) 

Report 

Version:  104 

Exception 

Type: EXC_BAD_ACCESS (SIGSEGV) 

Exception 

Subtype: KERN_INVALID_ADDRESS at 0x8000000c 

Triggered 

by Thread: 0 

Thread 

0 Crashed: 

0 libobjc.A.dylib     0x38ed3b66 

objc_msgSend + 6 

1 CoreFoundation        0x2ede773c -[__NSSetM removeObject:] + 92 

2 MapKit        0x3002de96 -[MKAnnotationManager 

_removeRepresentationForAnnotation:fromCull:] + 490 

3 MapKit        0x3004bc54 -[MKAnnotationManager 

_removeAnnotation:updateVisible:removeFromContainer:] + 272 

4 MapKit        0x3004bb38 -[MKAnnotationManager removeAnnotation:] + 24 

5 SLIM         0x00165828 -[TravelStarViewController 

mapView:viewForAnnotation:] (TravelStarViewController.m:1735) 

6 MapKit        0x3005ea86 -[MKMapView 

annotationManager:representationForAnnotation:] + 74 

7 MapKit        0x3002a136 -[MKAnnotationManager _addRepresentationForAnnotation:] 

+ 362 

8 MapKit        0x30028c4a -[MKAnnotationManager updateVisibleAnnotations] + 

1034 

9 Foundation      0x2f876358 __NSFireTimer + 60 

10 CoreFoundation       0x2ee7ae84 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ 

+ 12 

11 CoreFoundation       0x2ee7aa9e __CFRunLoopDoTimer + 790 

12 CoreFoundation       0x2ee78e26 __CFRunLoopRun + 1214 

13 CoreFoundation       0x2ede353c CFRunLoopRunSpecific + 520 

14 CoreFoundation       0x2ede331e CFRunLoopRunInMode + 102 

15 GraphicsServices       0x3387733e 

GSEventRunModal + 134 

16 UIKit         0x313fc7b0 UIApplicationMain + 1132 

17 SLIM         0x000f3fa6 

main (main.m:15) 

18 SLIM         0x000f3efc start + 36 
+5

Hai risolto questo problema? Sto ricevendo questo errore –

risposta

0

penso che potrebbe essere che gli eventi di traffico stanno arrivando e prendendo a lungo in NSOperation. L'operazione potrebbe iniziare e quindi fare riferimento a elementi grafici della mappa che non esistono più in MapView. Ad esempio, l'utente potrebbe scorrere la mappa e NSOperation potrebbe "accodarsi" e terminare quando la regione di destinazione non è visibile. L'incidente è chiaramente una violazione della memoria. Comunemente causato dal codice che tenta di accedere alla memoria liberata.

Suggerisco di esaminare l'utilizzo di NSOperationQueue. Riesco a vedere come renderebbe più fluida l'interazione tra le mappe, e quella parte potrebbe essere OK, ma l'accoppiamento con gli "eventi" potrebbe causare problemi.

Dall'arresto, vedo che è in esecuzione su un CFRunLoop e un NSTimer sta funzionando. Gli NSTimers sono famosi per non fermarsi completamente nell'Oggetto C. Quando finalmente sparano, gli elementi con cui lavorano sono comunemente fatti e hanno liberato la loro memoria.