2012-06-01 2 views
9

어디서나 모든 viewcontroller 클래스에서 호출 할 수있는 메서드를 정의하려면 어떻게해야합니까?iOS : 공용 메소드를 정의하는 방법?

저는 json 파일을 가져 오는 메소드가 있습니다. 애플 리케이션에 여러 개의 json 호출이 있기 때문에 재사용이 가능합니다.

도와 주시겠습니까?

+0

싱글 http://en.wikipedia.org/wiki/Singleton_pattern –

+0

rooster117 맞습니다. 당신은 정적 방법을 언급하고 있습니다. 모든 메소드는 Objective-C에 공개되어 있습니다. 그러나 클래스 확장에서 메서드를 선언하여 메서드를 숨기거나 컴파일러 경고를 발생시킬 수 있습니다. 아직도 그들은 사적인 것이 아닙니다. –

답변

6

당신은 카테고리를 통해 추가 할 수 있습니다

@interface UIViewController(JSON) 
-(void) bringJSON; 
-(void) fetchData:(NSData*) data; 


@ end 

을 그 다음에. 파일 :

@implementation UIViewController(JSON) 

-(void) bringJSON { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

[NSData dataWithContentsOfURL:yourURL]; 

[self performSelectorOnMainThread:@selector(fetchData:) 
withObject:data waitUntilDone:YES]; 

}); 

} 


-(void) fetchData:(NSData*) data { 

//parse - update etc. 

} 


@end 

여기서 y ou는 NSArray를 반환 할 것이고, 거기에 모든 메서드를 넣고 모든 UIViewController를 확장 할 수 있습니다. bringJSON 메서드는 모든 UIViewController와 그 하위 클래스에서 사용할 수 있습니다.

+0

woooo 그것은 정말로 awsome 남자 인 것처럼 보인다. 나는 그것을 시도 할 것이다! – 88fsantos

+0

json이로드 될 때 어떻게 반환 할 수 있습니까? : S 내가 "dispatch_get_main_queue"안에 넣으면 에러가납니다. – 88fsantos

+1

편집을 참조하십시오 –

4

"+"기호로 정의 된 정적 메서드에 대해 생각하고 있다고 생각합니다. 당신이 다음 인스턴스화 할 필요가 개체에 액세스하는 기능을해야하는 경우

[YourClassName yourFunctionName:5]; 

당신이 싱글을 수행 할 것입니다 :

+ (String) yourFunctionName:(NSInteger)someValue ..... 

그럼 먼저 클래스 이름으로 어디서나 부를 수 무늬.

2

첫 번째 답변은 다른 개체를 포함하는 파일에서 호출 할 수있는 메서드를 사용하여 (본질적으로) 다른 개체를 만드는 방법이므로 첫 번째 답변을 작성했습니다.

objective-c도 단순히 C 일 뿐이라는 것을 기억하십시오. 호출 할 수있는 ANSI-C 루틴을 포함하는 .c 파일을 포함시킬 수 있습니다.

새로운 .H하는 .m 파일 쌍을 생성

편집하고 .H 파일 :

+0

나는 클래스 메소드에 관한 나의 문제는 인스턴스 변수를 사용할 수 없기 때문에 나의 리턴은 항상 오류를 얻는다는 것이다. 클래스 변수를 사용하는 방법이 있습니까? 싱글 톤에 대해 읽은 것 같습니다. 싱글 톤은 프로토콜과 다릅니다. 나는 frontend에서 camed했고, 약 한 달 전부터 xcode에있다. 그래서 더 복잡한 일을하기가 조금 어려워졌습니다. oyur 도움 얘들 아! – 88fsantos

+0

당신은 항상 C++ 객체도 구현할 수 있습니다. 이렇게하면 보호 된/개인 변수에 함수 액세스 만 제공 할 수 있습니다. XCode는 C++ 객체를 Objective-C 코드로 컴파일 할 수 있습니다. 내가 몇 가지 링크를 찾으려고하지만, 여기에 StackOverflow에 제목 (샘플 코드없이)에 대한 게시물입니다. http : // stackoverflow.co.kr/questions/406753/how-well-is-objective-c 지원 – trumpetlicks

+0

tks man! 나는 그것을 읽을 것이다 – 88fsantos

3

메서드의 반환 형식 앞에 + 부호를 사용하십시오. 예를 들어

:

+ (void) Name: (NSString *) str{ 

} 
관련 문제