2014-01-14 5 views
0

Map.After에서 다양한 마커를 플롯하기 위해 NSDictionary을 사용하고 있습니다. 핀이 플롯되어 있습니다. 사용자 정보를 표시하기 위해 마커에서 콜을 클릭합니다. 이제 콜 아웃을 누르면 marker.title 및 marker.snippet과 같은 세부 정보를 View Controller에 전달하고 있습니다. 이러한 값을 참조하여 사전에서 다른 세부 정보를 가져 오려고합니다. 다른 뷰 컨트롤러에서 사전에 액세스하기 위해 수행하는 작업입니다. 데이터를 이런 식으로 전달다른 ViewController의 NSDictionary에 액세스하면 null

-(void)fetchMarkerData:(NSString *)typeOfMarker nameOfUser:(NSString *)username 
{ 
    NSString *type = typeOfMarker; 
    NSString *name = username; 
    NSLog(@"User Type - %@ & Name - %@ ", type, name); // shows name and type 

    NSLog(@"members dict from map view - %@" , self.membersDetailsDict); // shows null & self.membersDetailsDict is allocated and initialised in viewDidLoad. 
    if ([type isEqualToString:@"Member"]) 
{ 
    for (NSDictionary *instance in self.membersDetailsDict) 
    { 
     NSString *name= [instance objectForKey:@"pseudo"]; 
     if ([name isEqualToString:name]) 
     { 
      self.nameLabel.text = name; 
      self.displayPicture.image =[instance objectForKey:@"avatar"]; 
      self.cityLabel.text = [instance objectForKey:@"pays"]; 

     } 
    } 
} 

} 

은 : - 당신은 당신이 실제로 거기에 다시 당신이 접근해야 할 때 대신 인스턴스가 두 번째 뷰 컨트롤러에서 membersDict 변수에 액세스하려고하는 것처럼

- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker 
    { 
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                 bundle: nil]; 
    UserProfileViewController *userProfileViewController = (UserProfileViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"UserProfileViewController"]; 


     [userProfileViewController fetchMarkerData:marker.snippet nameOfUser:marker.title]; 

     userProfileViewController.membersDetailsDict = self.membersDict; //passing dictionary also   

     UINavigationController *nv = [[UINavigationController alloc]initWithRootViewController:userProfileViewController]; 
     [self.revealSideViewController popViewControllerWithNewCenterController:nv animated:YES]; 
+1

어떻게 컨트롤러를 밀고 데이터를 전달합니까? 해당 코드를 공유하십시오 – Retro

+0

googleMVC는 어떻게 초기화하셨습니까? – Joshua

+0

googleMVC = [[GoogleMapsViewController alloc] init]; ViewDidLoad에서 – icodes

답변

0

보인다 실제 membersDict 원래 만든 곳의 변수입니다. 내가 가정 한 내용은 ViewController1입니다. 자, 내가 알기로는 이것이 당신의 셋업입니다.

  1. Viewcontroller1에는 membersDict이라는 변수에 저장된지도 데이터 요소가 포함되어 있습니다.
  2. 사용자가 점을 클릭하면 viewController2이 표시되며 membersDict 변수 인 viewController1에 액세스하려고합니다. 이 작업을 수행 할 수

한 가지 방법 개봉에 대한 밀어 때 ViewController1에서 변수와 ViewController2 먹이보다는이 밀려 후`ViewController2에서 membersDict에 액세스를 시도하는 것입니다. 성공적으로 통과 이것은 당신의 membersDict 데이터를 보장합니다

// in .h viewController file 
NSMutabledictionary *membersDict; //whatever the data object was that you stored the data in 

//in .m viewController1 file 
//viewDidLoad method 
membersDict = [[NSMutableDictionary alloc] init]; 
//add whatever data you like to your membersDict 

//In section of code where youre about to push your second ViewController 2: Pass the members dict data too along with pushing the second viewController. 

ViewController2 = [[ViewController2 alloc] initWithWhatever]; 
viewController2.membersDict = self.membersDict; // 

or 
ViewController2 = [[ViewController2 alloc] initWithMembersDict:self.membersDict]; 

//Then push the viewController2. 

:

그래서 당신은 같은 것을 할 수 있습니다, 이것은 단지 원유 빠른 예입니다.

+0

당신의 솔루션도 사전을 통과 시키려고 노력했다. 그러나 여전히 사전에 null이 표시되어있다. 질문에 대한 대답은 – icodes

+0

이다. @ code는 @codes 야, 처음에는 회원이 원래 위치에서 확인한다. 귀하의 데이터를 추가) 실제로 저장되고 있습니다. 이것은 단지 데이터 관리 일 뿐이며, 어딘가에있는 데이터를 삭제하지만 변수에 올바르게 액세스하지 않거나 변수를 데이터로 올바르게 설정하지 않음으로써 발생합니다. – Pavan

관련 문제