2012-04-28 3 views
0

Bonjour, nous avons une application sur laquelle nous travaillons qui a du mal à faire fonctionner correctement les annotations. L'application construit et installe bien ... il y a environ 50k broches chargées à partir d'une base de données sur l'ipad ...IOS 4.3.2 Annotations MapKit

Le problème est que chaque broche affichera les mêmes informations d'annotation lorsqu'il est pressé ... ne peut pas comprendre comment le faire référencer le champ de base de données correct quand une broche est enfoncée (les broches sont toutes affichées dans les emplacements corrects afin que nous sachions qu'il fait référence à la base de données)

Je suppose que c'est quelque chose ici?

- (void) loadThePushPinInMap { 
NSString * filename= [[NSBundle mainBundle] pathForResource:@"geocoded" ofType:@"csv"]; 
NSString *data = [NSString stringWithContentsOfFile:filename]; 
NSString *strippedPartOne = [data stringByReplacingOccurrencesOfString:@"\"" withString:@""]; 
NSArray *rows = [strippedPartOne componentsSeparatedByString:@"\r"]; 
int size = [rows count]; 
for (int i =0; i < size; i++) { 
    if(i==0) 
     continue; 
    // This is now the data being parse 
    NSArray * line = [[rows objectAtIndex:i] componentsSeparatedByString:@","]; 


    double lat =[[[line objectAtIndex:5] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] doubleValue]; 
    double lon =[[[line objectAtIndex:6] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] doubleValue]; 

    //MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
    //region.center.latitude = lat ; 
    //region.center.longitude = lon; 
    //region.span.longitudeDelta = 0.01f; 
    //region.span.latitudeDelta = 0.01f; 

    CLLocationCoordinate2D coordinate; 
    coordinate.latitude = lat; 
    coordinate.longitude = lon;   


    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
    annotation.coordinate = coordinate; 
    annotation.title = [rows objectAtIndex:0]; 
    annotation.subtitle = [rows objectAtIndex:4]; 

    //[_mapView addAnnotation:annotation]; 
    [self.mapView addAnnotation:annotation]; 

} 

}

Voici le code MKAnnotationsview

#import <UIKit/UIKit.h> 
#import <MapKit/MKFoundation.h> 

// Post this notification to re-query callout information. 
MK_EXTERN NSString * const MKAnnotationCalloutInfoDidChangeNotification; 

#if (__IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED) 

enum { 
MKAnnotationViewDragStateNone = 0,  // View is at rest, sitting on the map. 
MKAnnotationViewDragStateStarting,  // View is beginning to drag (e.g. pin lift) 
MKAnnotationViewDragStateDragging,  // View is dragging ("lift" animations are complete) 
MKAnnotationViewDragStateCanceling,  // View was not dragged and should return to it's starting position (e.g. pin drop) 
MKAnnotationViewDragStateEnding   // View was dragged, new coordinate is set and view should return to resting position (e.g. pin drop) 
}; 

typedef NSUInteger MKAnnotationViewDragState; 

#endif // #if (__IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED) 

@class MKAnnotationViewInternal; 
@protocol MKAnnotation; 

MK_CLASS_AVAILABLE(NA, 3_0) 
@interface MKAnnotationView : UIView 
{ 
@private 
MKAnnotationViewInternal *_internal; 
} 

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString  *)reuseIdentifier; 

@property (nonatomic, readonly) NSString *reuseIdentifier; 

// Classes that override must call super. 
- (void)prepareForReuse; 

@property (nonatomic, retain) id <MKAnnotation> annotation; 

@property (nonatomic, retain) UIImage *image; 

// By default, the center of annotation view is placed over the coordinate of the annotation. 
// centerOffset is the offset in screen points from the center of the annotion view. 
@property (nonatomic) CGPoint centerOffset; 

// calloutOffset is the offset in screen points from the top-middle of the annotation view, where the anchor of the callout should be shown. 
@property (nonatomic) CGPoint calloutOffset; 

// Defaults to YES. If NO, ignores touch events and subclasses may draw differently. 
@property (nonatomic, getter=isEnabled) BOOL enabled; 

// Defaults to NO. This gets set/cleared automatically when touch enters/exits during tracking and cleared on up. 
@property (nonatomic, getter=isHighlighted) BOOL highlighted; 

// Defaults to NO. Becomes YES when tapped on in the map view. 
@property (nonatomic, getter=isSelected) BOOL selected; 
- (void)setSelected:(BOOL)selected animated:(BOOL)animated; 

// If YES, a standard callout bubble will be shown when the annotation is selected. 
// The annotation must have a title for the callout to be shown. 
@property (nonatomic) BOOL canShowCallout; 

// The left accessory view to be used in the standard callout. 
@property (retain, nonatomic) UIView *leftCalloutAccessoryView; 

// The right accessory view to be used in the standard callout. 
@property (retain, nonatomic) UIView *rightCalloutAccessoryView; 

// If YES and the underlying id<MKAnnotation> responds to setCoordinate:, 
// the user will be able to drag this annotation view around the map. 
@property (nonatomic, getter=isDraggable) BOOL draggable NS_AVAILABLE(NA, 4_0); 

// Automatically set to MKAnnotationViewDragStateStarting, Canceling, and Ending when necessary. 
// Implementer is responsible for transitioning to Dragging and None states as appropriate. 
@property (nonatomic) MKAnnotationViewDragState dragState NS_AVAILABLE(NA, 4_0); 

// Developers targeting iOS 4.2 and after must use setDragState:animated: instead of setDragState:. 
- (void)setDragState:(MKAnnotationViewDragState)newDragState animated:(BOOL)animated NS_AVAILABLE(NA, 4_2); 


@end 

Voici les codes Delegate.h .....

#import "MapinAppDelegate.h" 

@implementation MapinAppDelegate 

@synthesize window = _window; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 
return YES; 
} 

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
/* 
Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
*/ 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
/* 
Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
*/ 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
/* 
Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 
*/ 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
/* 
Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
*/ 
} 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
/* 
Called when the application is about to terminate. 
Save data if appropriate. 
See also applicationDidEnterBackground:. 
*/ 

}

@end

Voici les codes Delegate.m ....

#import <UIKit/UIKit.h> 

@interface MapinAppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@end 
+0

Le problème pourrait être dans votre 'viewForAnnotation: méthode déléguée', où la vue réelle est créée. –

+0

Définissez-vous correctement la propriété d'annotation de votre vue d'annotation? Pourriez-vous fournir votre code 'viewForAnnotation:'? – yinkou

+0

Ajout du code pour le viewForAnnotation ci-dessus – Monergy

Répondre

0

utilisation CustomAnnotaion qui est héritée par MKAnnotation que, dans cette classe attribuer vos propres propriétés, comme locationDetails, locationImage, etc.

Pour ajouter ces informations, mettez à jour votre MKAnnotatinView, en mettant en œuvre ce délégué - (MKAnnotationView *) Mapview: (MKMapView *) Mapview viewForAnnotation: (id) annotation

Exemple: http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html

http://www.highoncoding.com/Articles/805_Consuming_XML_Feed_and_Displaying_Public_Information_on_the_MapView_Control.aspx

+0

J'ai juste essayé d'ajouter le délégué mentionné ci-dessus mais j'obtiens une fenêtre indiquant que MKAnnotationView est verrouillé? Je me suis fatigué de le débloquer pour faire ces changements mais il dit que je ne le "possède" pas, donc je ne suis pas autorisé à le changer? – Monergy

Questions connexes