UPDATE 2:Dodawanie wielu adnotacje na mapie, ale wszystkie Pokaż Niektóre z tych samych danych
Oto istniejący kod zasięgu map, ale to jest jak adnotacje dostać wszystko w porządku z kołkami. Jeden raz pinezka będzie zielona, a po następnym uruchomieniu ta sama pinezka będzie czerwona. Skąd się bierze rozłączenie?
-(void) viewWillAppear:(BOOL)animated {
self.annotationArray = [[NSMutableArray alloc] init];
CLLocationCoordinate2D coord = {.latitude = 15.8700320, .longitude = 100.9925410};
MKCoordinateSpan span = {.latitudeDelta = 3, .longitudeDelta = 3};
MKCoordinateRegion region = {coord, span};
[mapViewUI setRegion:region];
PFQuery *query = [PFQuery queryWithClassName:@"Share"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.mapViewData = objects;
for (int i=0;i<[objects count];i++)
{
// Question * q = [[Question alloc]init];
PFObject * obj = [self.mapViewData objectAtIndex:i];
NSLog(@"%@", obj);
self.theObject = obj;
NSString *string = obj[@"WhereAt"];
NSArray *stringArray = [string componentsSeparatedByString: @","];
CLLocationDegrees myLatitude = [[stringArray objectAtIndex:0] doubleValue];
CLLocationDegrees myLongitude = [[stringArray objectAtIndex:1] doubleValue];
CLLocationCoordinate2D coord2 = {.latitude = myLatitude, .longitude = myLongitude};
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"MMM dd, yyyy";
MKPointAnnotation *annotation2 = [[MKPointAnnotation alloc] init];
[annotation2 setCoordinate:coord2];
[annotation2 setTitle:obj[@"FamilyName"]];
[annotation2 setSubtitle:obj[@"Result"]];
[mapViewUI addAnnotation:annotation2];
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if (annotation == mapViewUI.userLocation)
{
return nil;
}
else
{
NSUInteger index = [[mapView annotations] indexOfObject:annotation];
PFObject *objectForCurrentAnnotation = [self.mapViewData objectAtIndex:index];
MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] init];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"MMM dd, yyyy";
NSString *theResult = objectForCurrentAnnotation[@"Result"];
NSLog(@"Result is %@", theResult);
if ([theResult isEqualToString:@"Accepted Bible"]) {
NSLog(@"Accepted");
annotationView.pinTintColor = [UIColor greenColor];
}
else if ([theResult isEqualToString:@"Requested Different Material"]) {
NSLog(@"Different");
annotationView.pinTintColor = [UIColor blackColor];
}
else if ([theResult isEqualToString:@"Not Home"]) {
NSLog(@"Not Home");
annotationView.pinTintColor = [UIColor yellowColor];
}
else if ([theResult isEqualToString:@"Rejected Bible"]) {
NSLog(@"Rejected");
annotationView.pinTintColor = [UIColor redColor];
}
return annotationView;
}
return nil;
}
UPDATE:
Teraz widzę, że problem jest to, że self.theObject ustawiony jest jeden raz, więc to po prostu pobiera dane z tego wszystkiego nie obsługiwane przez adnotacji. Chyba teraz chodzi o to, jak mogę go pokazać dla każdego obiektu zamiast tego, co był ostatnim zestawem?
Moja aplikacja korzysta z Parse.com i PFObjects. Aplikacja zapytuje PFObject, aby uzyskać wszystkie dane dla każdego wpisu w wierszu, wyciąga współrzędne dla danej lokalizacji dla tego wpisu, wraz z różnymi bitami danych i dodaje adnotację dla każdego z nich. Kiedy ustawiam MKAnnotationView dla tego, abym mógł mieć wiele kolorowych pinezek poza tym, co Apple zazwyczaj pozwala ci łatwo zrobić, napotykam problemy. Obraz i niektóre dane do adnotacji ustawiają każdą pinezkę na dowolną ostatnią wywołaną. Tytuł i podtytuł są w porządku, ale nie obraz koloru ani objaśnienia. Oto mój kod, co tu jest nie tak?
-(void) viewWillAppear:(BOOL)animated {
CLLocationCoordinate2D coord = {.latitude = 15.8700320, .longitude = 100.9925410};
MKCoordinateSpan span = {.latitudeDelta = 3, .longitudeDelta = 3};
MKCoordinateRegion region = {coord, span};
[mapView setRegion:region];
PFQuery *query = [PFQuery queryWithClassName:@"Share"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSLog(@"YAY");
// The find succeeded. The first 100 objects are available in objects
// questionsList = [[NSMutableArray alloc]init];
NSLog(@"Objects%lu", (unsigned long)[objects count]);
for (int i=0;i<[objects count];i++)
{
// Question * q = [[Question alloc]init];
PFObject * obj = [objects objectAtIndex:i];
self.theObject = obj;
NSString *string = obj[@"WhereAt"];
NSArray *stringArray = [string componentsSeparatedByString: @","];
CLLocationDegrees myLatitude = [[stringArray objectAtIndex:0] doubleValue];
CLLocationDegrees myLongitude = [[stringArray objectAtIndex:1] doubleValue];
CLLocationCoordinate2D coord2 = {.latitude = myLatitude, .longitude = myLongitude};
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"MMM dd, yyyy";
NSString *theResult = obj[@"Result"];
NSString *theDate = [dateFormatter stringFromDate:obj[@"DateVisited"]];
NSString *combined = [[theResult stringByAppendingString:@" on "] stringByAppendingString:theDate];
NSString *theTitle = [[obj[@"FamilyName"] stringByAppendingString:@" "] stringByAppendingString:obj[@"StreetAddress"]];
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:coord2];
[annotation setTitle:theTitle];
[annotation setSubtitle:combined];
[mapView addAnnotation:annotation];
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] init];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"MMM dd, yyyy";
NSString *theResult = self.theObject[@"Result"];
NSLog(@"Result is %@", theResult);
if ([theResult isEqualToString:@"Accepted Bible"]) {
// NSLog(@"Accepted");
annotationView.pinTintColor = [UIColor greenColor];
}
else if ([theResult isEqualToString:@"Requested Different Material"]) {
//NSLog(@"Different");
annotationView.pinTintColor = [UIColor blackColor];
}
else if ([theResult isEqualToString:@"Not Home"]) {
// NSLog(@"Not Home");
annotationView.pinTintColor = [UIColor yellowColor];
}
else if ([theResult isEqualToString:@"Rejected Bible"]) {
//NSLog(@"Rejected");
annotationView.pinTintColor = [UIColor redColor];
}
//annotationView.image = [UIImage imageNamed:@"arrest.png"];//here we use a nice image instead of the default pins
PFFile *thumbnail = self.theObject[@"HousePicture"];
[thumbnail getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
UIImage *thumbnailImage = [UIImage imageWithData:imageData];
self.theImage = thumbnailImage;
//annotationView.image = thumbnailImage;
UIView *leftCAV = [[UIView alloc] initWithFrame:CGRectMake(0,0,60,60)];
UIImageView *theImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];
theImageView.image = self.theImage;
annotationView.leftCalloutAccessoryView = leftCAV;
[leftCAV addSubview:theImageView];
annotationView.canShowCallout = YES;
}];
return annotationView;
return nil;
}
byłem poza miastem i właśnie wróciłem do wypróbowania Option # 1 napisał . Jednak wciąż mam pewne trudności. Teraz pokazuje różne kolory, ale nie zawsze pasuje do prawidłowych lokalizacji. Na przykład mówię, żeby zrobiło się zielone, jeśli wynikiem jest Zaakceptowana Biblia. Adnotacja na mapie poprawnie powie w podtytule, że została zaakceptowana, ale kolor zostanie odrzucony. – user717452
@ user717452 spróbuj numer metody 2. –
@ user717452 co masz na myśli, że kolor został odrzucony? –