您好,我们正在开发一个应用程序,该应用程序在让注释正常运行时遇到了一些问题。该应用程序可以正常构建和安装...从 ipad 上的数据库中加载了大约 50k 个引脚...
问题是每个引脚在按下时都会显示相同的注释信息......无法弄清楚当按下引脚时如何让它引用正确的数据库字段(引脚都显示在正确的位置,所以我们知道它正在引用数据库)
我想这是这里的东西?
- (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];
}
}
这是 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
这是 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:.
*/
}
@结尾
这是 Delegate.m 代码....
#import <UIKit/UIKit.h>
@interface MapinAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end