2017-05-01 16 views
0

Objective-C를 처음 접했으므로 하나의 NSView에서 다른 NSView로 NSArray 값을 전달하는 적절한 방법을 찾기 위해 고심하고 있습니다. 내 코드는 다음과 같습니다NSView의 Objective-C 값 전달

NSViewOne :

NSLog(@"%@", arrayValues); // 10, 20, 30 
NSViewTwo *displayValues = [[NSViewTwo alloc] init]; 
[displayValues showValuesFromOne:arrayValues]; 

NSViewTwo : NSViewOne에서

- (void)showValuesFromOne:(NSArray *)sender { 
    NSArray *arrayValues = sender; 
    NSLog(@"%@", arrayValues); 
} 

배열 값을 보여 NSViewTwo에 내가 (널) 얻을. 오해가

+0

xib 또는 스토리 보드의 두 번째보기는 무엇입니까? 그렇다면 첫 번째 코드 단편에서 생성 된 뷰는 완전히 다른 인스턴스입니다. Btw :'getValues'는 실제로 뭔가 **를 설정하는 메소드의 혼란스러운 이름입니다. – vadian

+0

@vadian : 두 NSViews는 .nib 윈도우 (osx)로 표시되는 두 파일의 별도 클래스입니다. 나는 그 방법을 덜 혼란스럽게 만들기 위해 이름을 바꿨다. –

+0

그런 다음 예를 들어'IBOutlet'을 사용하여 .nib에서 2를 보려면 실제 참조가 필요합니다. '[[NSViewTwo alloc] init]'은 새로운 (다른) 인스턴스를 생성합니다. – vadian

답변

0

: 모든 액션 메소드의

우선 코드가 아닌 출구 지점에 GUI에서 진입 점입니다. 전달 된 값은 항상 보낸 사람입니다. 코드에서 액션 메소드를 사용할 수는 있지만 이는 거의 유용하지 않습니다. 따라서 -showValuesFromOne:은 전혀 이해가되지 않습니다.

둘째로,보기에서 다른보기로 값을 전달하는 경우는 드뭅니다. View는 컨트롤러와 통신하며 그 반대도 마찬가지입니다. 따라서 뷰 1의 코드는 컨트롤러에 있어야하며 뷰 1에 의해 실행되어야합니다. 그러면 호출 된 컨트롤러 코드는 값 2를 보냅니다.이 작업 메서드는 사용하지 말고 간단한 메서드를 사용하십시오.

컨트롤러는 두 개의 펜촉을 모두로드하므로 두보기 모두에 콘센트가 있습니다. 따라서 컨트롤러의 경우 양쪽보기와 통신하기 쉽습니다. 스레드가 손에 수렴합니다.

+0

하지만'IBAction'이 아니라'void '를 사용하고 있습니다. 그냥 "a"(값) -> x를 "b"(값) -> x로 가져와야합니다. –

+0

당신 IBAction은 무엇입니까? 그러나 배열은 보낸 사람이 아닙니다. –

+0

IBAction은 IBOutlet과 함께 사용되는 것으로 생각했지만 이는 단지 추측에 불과합니다. NSArrary가 보낸 사람이 아니라면 무엇입니까? 감사. –