2011-08-18 8 views
2

사전을 nsmutabledictionary에 추가하는 데 문제가 있습니다. 누구든지 내가 뭘 잘못하고 있는지 알 수 있니?NSMutableDictionary에 항목을 추가하십시오.

@interface viewMap : UIViewController<MKMapViewDelegate> { 

    NSMutableDictionary *onclickDic; 

} 

@property (nonatomic, retain) NSMutableDictionary *onclickDic; 
@end 

@implementation viewMap 
@synthesize onclickDic; 

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 

    NSString *pushLat = [NSString stringWithFormat:@"%f", [annotation coordinate].latitude]; 
    NSString *pushLng = [NSString stringWithFormat:@"%f", [annotation coordinate].longitude]; 

    NSDictionary *latlngDic = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:pushLat, pushLng, nil] forKeys:[NSArray arrayWithObjects:@"lat", @"lng", nil]]; 

    NSDictionary *toPush = [NSDictionary dictionaryWithObject:latlngDic forKey:[NSString stringWithFormat:@"%i", i]]; 


    NSLog(@"toPush is %@", toPush); // this one is correct and works 

    [self.onclickDic addEntriesFromDictionary:toPush]; 

    NSLog(@"onclickDic is %@", onclickDic); // this one gives (null) 
} 
@end 
+1

"을 갖는 문제는"좀 더 많은 정보가없는 문제입니다. 정확히 무엇이 잘못 되었습니까? 오류 메시지가있는 경우 그 오류 메시지는 무엇이며 오류는 어디에서 발생합니까? –

+0

@Rudy Velthuis 답장을 보내 주셔서 감사합니다. 아래 답변은 나를 도왔다. 나는 alloc/init을 잊어 버렸고 클릭 객체를 놓았다. – Melvin

+0

그래도 다음에 질문이 있으시면, 더 많은 정보를 제공해주세요. 사람들은 분명히 당신의 문제를 짐작할 수 있었지만 당신이 게시 한 것에는 발견 할 수 없습니다. –

답변

3

onclickDic을 만들지 않은 것 같습니다. 당신은 결코 그것을 풀어주지 않습니다. 이러한 방법을 추가

시도 :

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 
{ 
    self = [super initWithNibName:nibName bundle:nibBundle]; 
    if (self) 
    { 
     onclickDict = [[NSMutableDictionary alloc] init]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [onclickDict release]; 

    [super dealloc]; 
} 
2

onclickDic이 할당 된 것처럼 보이지 않습니다. mapView:viewForAnnotation: 메서드가 호출되기 전에 인스턴스를 할당하고 있는지 확인하십시오.

또한 문제와 관련이 없지만 사전은 필요하지 않습니다. 그냥 직접 onclickDic에 키/값을 추가

[onclickDic setValue:latlngDic forKey:[NSString stringWithFormat:@"%i", i]]; 
2

당신은 어디 self.onclickDic를 인스턴스화하지 않는 것. @synthesize라고해도이 작업은 수행되지 않습니다. 아마 가장 좋은 곳은 init입니다.

호출이 실패하지 않는 이유는 Object C에서 nil 개체에서 함수를 호출하는 것이 정상적인 것입니다. 이것은 대개 메소드를 호출 할 때 일반적으로 사용됩니다.

+0

감사합니다. 다음과 같이 작동합니다 : onclickDic = [[NSMutableDictionary alloc] init]; 물체를 놓을 때 가장 좋은 방법/순간은 무엇입니까? 왜냐하면 그것은 내가 추측하는 객체를 추가하는 메소드에서 수행 될 수 없기 때문입니다. – Melvin

관련 문제