2015-01-21 2 views
0

RubyMotion 프로젝트의 타사 Obj-C 정적 라이브러리 및 API를 사용 중이며 라이브러리의 클래스 중 하나가 API 헤더 파일의 인터페이스 섹션에 일부 공용 인스턴스 변수를 정의합니다.getter없이 RubyMotion의 Obj-C 공용 인스턴스 변수에 액세스하는 방법은 무엇입니까?

ObjC에서
@interface TransporterFile : NSObject 
{ 
@public 
    NSString *name; 
    TransporterFileType type; 
    NSDate *modifyTime; 
    NSDate *createTime; 
    unsigned long long size; 
} 
- (BOOL) isFolder; 
- (BOOL) isShared; 
@end 

,이 값은 다음과 같이 접근 할 수 있습니다 : 이름 = transporterFile-> 이름 하지만 점 표기법을 사용할 수 있도록 정의 된 게터가 없습니다 여기에 꽤 짧다으로 코드입니다.

RubyMotion에는 아마도 getter가 없기 때문에 인스턴스 변수가 노출되지 않습니다. .instance_variables 메서드를 사용하여 시도하고 빈 배열을 반환합니다. 또한 instance_variable_get ('@ name') 메서드를 시도했지만 그 중 하나가 작동하지 않습니다. 두 메서드 isFolder 및 isShared를 호출 할 수 있으며 예상대로 작동합니다.

업데이트 : Swift 언어에서 비슷한 작업을 시도했는데 비슷한 문제가있어서 valueForKeyPath ('name') 메서드를 사용하여 'name'인스턴스 변수에 액세스 할 것을 제안했습니다. 그것은 Swift에서 근무했고 유사한 방법이 RubyMotion에 사용 가능한지를 확인하도록 유도했습니다. 좋은 소식은 이것이 작동하지만 조금 어수선해서 더 나은 대답이 가능할 것이라는 희망에서이 질문을 지금 당장 열어 두겠습니다.

타사 라이브러리가 모범 사례를 따르지 않는다는 것을 알고 있으며 인스턴스 변수를 직접 사용하는 경우 대신 일부 속성을 정의하는 것이 좋습니다.하지만 현재로서는 해결 방법이 필요합니다.

누구나 RubyMotion에서 이러한 공용 인스턴스 변수에 액세스하거나 다른 공급 업체의 라이브러리를 다른 ObjC 라이브러리에서 래핑하여 제안 할 수 있습니까? ObjC 라이브러리 (wrapper 또는 not)를 작성한 적이 없기 때문에이 옵션을 시작하기 전에 몇 가지 조언을 부탁드립니다.

여기에서 전체 API를 볼 수 있습니다 : https://secure.connecteddata.com/developer Mac OS X 10.10과 Xcode 6.1.1 및 최신 버전의 RubyMotion을 사용하고 있습니다. 위 사이트에서 다운로드 한 Mac OS X API에는 헤더 파일이 누락되어 있으므로 iOS 다운로드의 헤더를 사용했습니다.

많은 감사, Craig.

답변

0

다음 메소드를 사용하여 공용 인스턴스 변수에 액세스 할 수 있음을 설명하기 위해 내 질문을 업데이트했습니다.

obj.valueForKeyPath('name') 

그러나 조금 더 어색하기 때문에 더 좋은 방법을 알려 드리겠습니다.

ps. 오픈 포럼에서 질문을 게시 한 지 몇 분 만에 문제 해결을 위해 시간을 들일 수있는 이유는 무엇입니까? Grr ... :)

관련 문제