2011-10-05 5 views
2

J'ai une application qui implique beaucoup de MKOverlayViews. Chaque fois que l'on est ajouté à la carte, il est également ajouté à un NSArray. Lorsque l'utilisateur souhaite arrêter d'ajouter des superpositions, j'aimerais qu'il puisse les enregistrer et pouvoir y accéder plus tard. Comment puis-je stocker un tableau de MKOverlayViews dans un plist, puis les recharger dans mapView plus tard? Est-ce possible?Saving MKOverlayView array -> plist

Je suis essayant d'utiliser ce code pour prendre la MKPolylineViews du tableau et ajoutez les MKPolylines correspondant à la carte, mais il se bloque à la ligne « [Mapview addOverlay .... ».

tableau d'écriture à plist:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if(overlays) 
{ 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:overlays]; 
    [defaults setObject:data forKey:@"theKey"]; 
    [defaults synchronize]; 
} 

données de lecture de plist:

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"theKey"]; 
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

for(MKPolylineView* a in arr) 
    [mapView addOverlay:a.polyline]; 

Répondre

1

Je regarde l'archivage avec NSArchiver ou NSKeyedArchiver puis de les écrire sur le disque. Probablement mieux que d'essayer de les serrer d'une manière ou d'une autre ...

+0

J'ai essayé, mais j'ai rencontré quelques problèmes. Je dois changer les MKPolylines sur la carte dans MKPolylineViews afin qu'ils soient compatibles NSCoding. Une fois que je les ai décodés, j'ai du mal à les changer en MKPolylines que je peux mettre sur la carte. Bien que j'accède à la propriété polyline de chaque MKPolylineView, le compilateur me dit qu'il est nul, et que mon programme se bloque. Je ne sais pas pourquoi cela arrive. –

+0

Avez-vous un échantillon de code? Je pense toujours que mon approche suggérée est raisonnable, il peut être juste question d'essayer quelques transformateurs différents pour obtenir vos MKPolylines correctement archivés et récupérés ... – isaac

+0

Voir ma modification s'il vous plaît –