2011-07-05 4 views
-1

두 클래스 사이에 NSMutableDictionary 객체를 전달하려고합니다. 사전을 반환하지 않는 메서드를 추가하려고 시도했습니다.NSDictionary 클래스 간 전달

-(NSMutableDictionary*) getResponse 
{ 
return response; //where response is a dictionary that has keys and objects assigned 
} 

그러나 사전을 다른 클래스에서 가져올 수는 없습니다. 그것은 "null"을 반환합니다.

+0

귀하의 예를 아무 문제가 없습니다 ... 만약'response'가 클래스에 정의되어 있다면, 응답을 리턴 할 것입니다. 다른 클래스가 그것을 유지하는지 확인하십시오! –

+3

한 가지 잘못된 점이 있습니다. 이름입니다. Cocoa 명명 규칙을 준수하기 위해서는 단순히'응답 '이어야합니다. 'get'로 시작하는 selector는 콜론으로 끝나야하고, 인수는 얻은 값 (return-by-reference)을 저장할 포인터 여야합니다. 이 방법은 그대로지만 간단히'response'라고 명명해야합니다. –

답변

2

나는 아무 소용이없는 방법을 추가하려고 시도했습니다. 이 방법은 사전을 반환하기 때문에입니다

-(NSMutableDictionary*) getResponse 
{ 
return response; 
} 

. 메서드 자체를 반환하려면 메서드의 선택기에 대한 구현을 위해 self 개체를 요청하거나 Method 구조를 반환하도록 Objective-C 런타임에 요청해야합니다.

하지만 실제로하고 싶은 것이 아닙니다. 그렇습니까?

이 방법으로 응답 사전을 반환한다는 의미 인 경우 해당 응답은 정확하게 수행됩니다. 서면으로 옳습니다 (이름에 대한 설명은 질문에 대한 내 의견에서 이미 설명했듯이).

...하지만 다른 클래스에서 가져온 데이터는 가져올 수 없습니다.

이 메서드는 데이터 개체를 반환한다고 주장하지 않습니다. 그것은 사전 객체를 반환한다고 주장한다. 데이터 객체를 반환하면 버그가됩니다.

... void를 반환합니다.

아니요, NSMutableDictionary *을 반환합니다. void은 유형입니다. 그것은 다른 맥락에서 의미가 있습니다.

nil (아무 객체도 가리 키지 않음)을 반환한다는 의미라면 반환 할 응답 사전이 없습니다. 이 객체에 응답을 요청할 때까지 응답하지 마십시오.

응답을 원하는 개체를 응답을 보유하는 개체의 대리자로 만들고 응답이 들어올 때 응답 보유자가 해당 대리인에게 메시지를 보내도록 할 수 있습니다. 그 메시지; 대안은 응답 보유자가 자신을 전달하는 것이며 대리인은 응답자에게 응답 방법 사전 구현 방법을 요청합니다.

더 많은 정보 : (대표단의 설명을 포함하지만, 그 부분을 생략하지 않음)

  • The Objective-C Programming Language
  • Cocoa Fundamentals Guide

  • +0

    나는 더 이해하기 위해 내 질문을 편집했습니다. 그러나 어떤 이유로 든 변수는 유지되지 않는 것처럼 보입니다. 나는 내 코드를 점검 할 것이다. 감사. – Baub

    +0

    @James Martinez : 왜 코드가 유지 될지는 이유가 없습니다. 이 액세스 권한에는이 액세스 권한이 포함되지 않으므로 호출자가 액세스 권한을 보유한 경우에만 유지됩니다. 'response'에서 사전의 원래 소유권을 언급하고 있다면 getter는 그것을 찾을 곳이 아닙니다 : setter를 보거나 변수 또는 속성에 대한 원래 할당. Objective-C 언어 문서에서 논의 된 것처럼 변수에 할당하고 속성에 할당하는 방법은 매우 다릅니다. –

    0

    메소드가 nil을 반환하면 사용자의 response 변수가 nil이기 때문입니다. 이 시점에서 초기화되지 않았을 가능성이 큽니다. getResponse 메소드에서 NSLog(@"Response: %@", response);을 시도하십시오. 콘솔이 인쇄하는지 (null) 또는 유효한 NSMutableDictionary 객체인지 확인하십시오.

    +0

    null을 출력하지만 이전에 선언되고 사용 된 정보가 이미 있어야합니다. – Baub

    +1

    변수가 설정되지 않았 음을 나타냅니다. 메모리 보존은 여기에서 문제가되지 않습니다. 이 메소드를 실행하기 전에 init/setter가 호출되지 않았습니다. 또는 init'd 대신 새로운 객체에서 실행하고 있습니다. – David

    +0

    여기에 내 코드를 첨부했습니다 : http://stackoverflow.com/questions/6599955/cant-send-nsmutabledictionary-to-another-class – Baub