1

私が抱えている問題は、マップを長時間タッチするとデータが Core Data に保存され、NSLogs でこのデータを取得できますが、このデータから複数のマップ マーカーを作成する方法がわかりません。これらのマーカーを描画するための for ループの例を教えてもらえますか?

    -(void) mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate{
    location = coordinate;
    [self alertview1];
}

- (void) alertview1 {
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Save Map Location" message:@"Enter   Title & Description" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    [av setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];

    [[av textFieldAtIndex:1] setSecureTextEntry:NO];
    [[av textFieldAtIndex:0] setPlaceholder:@"Title"];
    [[av textFieldAtIndex:1] setPlaceholder:@"Description"];
    [av show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex != alertView.cancelButtonIndex) {
    markerTitle = [alertView textFieldAtIndex:0].text;
    markerSnippet = [alertView textFieldAtIndex:1].text;
    NSLog(@"1 %@", [alertView textFieldAtIndex:0].text);
    NSLog(@"2 %@", [alertView textFieldAtIndex:1].text);
    [self saveMarker];


}
- (void) saveMarker{
    NSManagedObjectContext *context = [self managedObjectContext];

    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Marker"  inManagedObjectContext:context];
    [newDevice setValue:[NSNumber numberWithDouble:location.latitude] forKey:@"latitude"];
    [newDevice setValue:[NSNumber numberWithDouble:location.longitude] forKey:@"longitude"];
    [newDevice setValue:markerTitle forKey:@"title"];
    [newDevice setValue:markerSnippet forKey:@"snippet"];

    NSError *error = nil;
    if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self dismissViewControllerAnimated:YES completion:nil];
    [self fetchMarkers];
    }
- (void) fetchMarkers {
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Marker"];
    self.markers = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    NSArray *title = [self.markers valueForKey:@"Title"];
    NSArray *snippet = [self.markers valueForKey:@"Snippet"];
    NSArray *latitude = [self.markers valueForKey:@"Latitude"];
    NSArray *longitude = [self.markers valueForKey:@"Longitude"];
    NSLog (@"%@", title);
    NSLog (@"%@", snippet);
    NSLog (@"%@", latitude);
    NSLog (@"%@", longitude);
    double lat = [latitude doubleValue];
    double lng = [longitude doubleValue];

    for (GMSMarker *marker in title) {
        GMSMarker *mkr = [[GMSMarker alloc] init];
        [mkr setPosition:CLLocationCoordinate2DMake(lat,lng)];
        [mkr setAnimated:YES];
        [mkr setTitle:title];
        [mkr setSnippet:snippet];
        [mkr setMap:self.mapView1];

}

}
4

1 に答える 1

1

何時間も頭を壁にぶつけて数枚の写真を撮った後、ようやく思い浮かび、とても簡単でした. コアデータからのデータを別々の配列に貼り付け、マーカーにインデックスを付けてから、配列に変数にインデックスを付けました。とにかくここにコードがあります。他の誰かがこれを行うより良い方法を持っている場合は、私に知らせてください。私はまだObjective Cを学んでおり、数か月前に始めたばかりなので、おそらくより良い解決策がありますが、これは少なくとも機能します.

    -(void) mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate{
    location = coordinate;
    [self alertview1];
}

- (void) alertview1 {
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Save Map Location" message:@"Enter Title & Description" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    [av setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];

    // Alert style customization
    [[av textFieldAtIndex:1] setSecureTextEntry:NO];
    [[av textFieldAtIndex:0] setPlaceholder:@"Title"];
    [[av textFieldAtIndex:1] setPlaceholder:@"Description"];
    [av show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex != alertView.cancelButtonIndex) {
        markerTitle = [alertView textFieldAtIndex:0].text;
        markerSnippet = [alertView textFieldAtIndex:1].text;
        NSLog(@"1 %@", [alertView textFieldAtIndex:0].text);
        NSLog(@"2 %@", [alertView textFieldAtIndex:1].text);
        [self saveMarker];

} else {
// this is where you would handle any actions for "Cancel"
}
}
- (void) saveMarker{
    NSManagedObjectContext *context = [self managedObjectContext];

    // Create a new managed object
    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Marker" inManagedObjectContext:context];
    [newDevice setValue:[NSNumber numberWithDouble:location.latitude] forKey:@"latitude"];
    [newDevice setValue:[NSNumber numberWithDouble:location.longitude] forKey:@"longitude"];
    [newDevice setValue:markerTitle forKey:@"title"];
    [newDevice setValue:markerSnippet forKey:@"snippet"];

    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self dismissViewControllerAnimated:YES completion:nil];
    [self fetchMarkers];
}
- (void) fetchMarkers {
    // Fetch the devices from persistent data store
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Marker"];
    self.markers = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    NSMutableArray *title = [self.markers valueForKey:@"Title"];
    NSMutableArray *snippet = [self.markers valueForKey:@"Snippet"];
    NSMutableArray *latitude = [self.markers valueForKey:@"Latitude"];
    NSMutableArray *longitude = [self.markers valueForKey:@"Longitude"];



    for (int i = 0; i < [title count]; i++){
        GMSMarker *mkr = [[GMSMarker alloc] init];
        double lat = [[latitude objectAtIndex:i] doubleValue];
        double lng = [[longitude objectAtIndex:i] doubleValue];
        NSString *T = [title objectAtIndex:i];
        NSString *S = [snippet objectAtIndex:i];

        [mkr setPosition:CLLocationCoordinate2DMake(lat, lng)];
        [mkr setAnimated:YES];
        [mkr setTitle:T];
        [mkr setSnippet:S];
        [mkr setMap:self.mapView1];

    }
于 2013-07-11T14:01:02.327 に答える