-1

この作業を行うのに問題があります。コアデータを使用してユーザーのリストを取得します。

NSFetchrequetsを使用して、ユーザーの場所、場所のリスト、郵便番号を追加します

画像

NSFetchRequest *request =[NSFetchRequest fetchRequestWithEntityName:@"SiteLocation"]; //request all objects
NSArray *fetchedObjects = [self.srmDatabase.managedObjectContext executeFetchRequest:request error:nil];

したがって、FetchedResultControllerを使用してテーブルビューをロードするエンティティ「SiteLocation」があります

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     //NSLog(@"CELL");
    static NSString *CellIdentifier = @"Site Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...
    SiteLocation * siteLocation = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = siteLocation.siteName;

    return cell;
}

次に、選択した行をMapViewControllerdidSelectRowAtIndexPathに送信しました

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
   NSLog(@"didselect sitePC");

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {

    UserDetails *userinfo = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    self.mapview.sitePC = userinfo; //sitePC is (id)
    NSLog(@"object selected= %@", userinfo);
} 
}

2012-10-04 13:27:46.401 SRMAB[459:c07] didselect sitePC = <SiteLocation: 0x1d80ad20> (entity: SiteLocation; id: 0x1d86b210 <x-coredata://523E1EB6-01DF-4889-B1A1-2E38E92D385E/SiteLocation/p120> ; data: {
    projectName =     (
        "0x1d82bc20 <x-coredata://523E1EB6-01DF-4889-B1A1-2E38E92D385E/UserDetails/p144>"
    );
    siteName = "Bloomberg Place 1";
    sitePostCode = "W1B 5AU";
})

MapViewControllerでは、これによりsitePostcodeがPlaceMarkに変換されます

-(void)myMapview
{
    NSLog(@"mymapview");

    NSString *addressString = [self.sitePC valueForKey:@"sitePostCode"];

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    [geocoder geocodeAddressString:addressString completionHandler:^(NSArray *placemarks, NSError *anError)
     {
         NSLog(@"Placemark count:%d",[placemarks count]);

         for(CLPlacemark *placemark1 in placemarks)
         {
             NSLog(@"Placemark: %@",placemark1);
             //[self displayPlacemarks:placemarks];
             CLLocationCoordinate2D zoomLocation;
             zoomLocation.latitude = placemark1.location.coordinate.latitude;
             zoomLocation.longitude= placemark1.location.coordinate.longitude;

             MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 1000, 1000);
             MKCoordinateRegion adjustedRegion = [self.mapview regionThatFits:viewRegion];
             [self.mapview setRegion:adjustedRegion animated:YES];

             MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
             pa.coordinate = placemark1.location.coordinate;
             pa.title = [self.sitePC valueForKey:@"siteName"];
             [self.mapview addAnnotation:pa];
         }

これが理にかなっていることを願っています。

ロード時にマップ上のすべての場所を表示するにはどうすればよいですか?

元の質問がスペルミスだったため、質問が更新されました

4

1 に答える 1

1

reason: '[<SiteLocation 0x1d80ad20> valueForUndefinedKey:]: the entity SiteLocation is not key value coding-compliant for the key "sitePostcode".'

@"sitePostcode" は @"sitePostCode" と同じではありません。-valueForKeyinへの呼び出しでは前者を使用します-myMapViewが、Core Data モデルの図は後者を示しています。

更新:地図上に場所を表示するには、地図の注釈またはオーバーレイを使用します。たとえば、マップに を追加しMKPinAnnotationて、マップ上の位置を示すことができます。詳細については、地図に注釈を付けるを参照してください。あなたはすでに を使用しているようですMKPointAnnotationので、あなたの質問が何であるかは明確ではありません。一度にすべての注釈を表示しようとしている可能性があります。それが問題である場合は、すべての場所を囲む四角形を計算し、その領域が含まれるようにマップをズームするだけで済みます。

于 2012-10-04T13:35:12.620 に答える