2012-03-12 3 views
2

일부 구문 분석을 수행하는 NSObject 클래스에서 내 ViewController의 메서드를 호출하려고합니다.NSObject 클래스에서 ViewController 메서드 호출

처음에는 연결 클래스를 호출합니다. 내 서버에서 일부 데이터를 다운로드 한 다음이 데이터를 파서 클래스에 전달합니다. 이제는이 데이터를 viewcontroller에 다시 전달합니다. 이 뷰 (테이블 스택)의 테이블 뷰를 다시로드하십시오. (네비게이션 스택에있는 것)

어쨌든 이것은 약간의 오류를 일으키고 있습니다.이 방법을 호출하는 방법이 될 수도 있습니다. 여기 내가 어떻게 부르는거야.

MyViewController *myViewController = [[MyViewController alloc] init]; 
    [myViewController initFilterArray:filteredArray]; 

이제는 새로운 viewcontroller 개체를 할당하기 때문에이 문제가 발생한다고 생각하십니까? numberOfRowsInSection

.. 참

그 reloaddata 만

  • numberOfSectionsInTableView
  • 있는 tableView를 호출하는 결과를 terminoligy 확신 ...하지만하지 그 권리가 .. 있습니다 그 다음 그것. 도움을 주시면 감사하겠습니다.

    업데이트 : 그래서 프로토콜/대리인이 내 문제를 해결하는지 확인하려고합니다.

    그래서 내 class.h이 내가 class.m에

    @protocol PassParsedData <NSObject> 
    @required 
    - (void) sendMyArray:(NSArray *)modelArray; 
    @end 
    //.. 
    id <PassParsedData> delegate; 
    //.. 
    @property (strong) id delegate; 
    

    다음 뭘 오전입니다

    //..method 
    [[self delegate]sendMyArray:filteredArray]; 
    //.. 
    

    는 내가 원하는 곳에 내보기 컨트롤러를 통해 다음 내 클래스를 먹으 렴 나는이

    viewcontroller.h을이 sendMyArray 전화

    #import "class.h" //delegates & protocols 
    //.. 
    interface VehicleSearchViewController : UITableViewController <PassParsedData> { 
    //.. 
    

    는 내가이 일을

    - (void)sendArray:(NSArray *)array 
    { 
        ICMfgFilterArray = array; 
        [self.tableView reloadData]; 
    } 
    

답변

1

한 가지 방법은 대의원 및 프로토콜의 권장되는 방법이 될 것입니다 ..이

viewcontroller.m // 같이 호출. NSObject은 프로토콜을 선언합니다. ViewController은 실제로 프로토콜을 구현하고 자체를 위임자로 설정합니다. 그런 다음 NSObject은 메소드를 호출합니다 (누가 구현했는지 모름). 객체간에 의사 소통하는 데 느슨하게 결합 된 방식입니다.

는 사실은 최근에 문제가 위의 갱신을 바탕으로

UPDATE

... 프로토콜과 당신이 관심이 있다면 대표에 대한 기본적인 소개에 blog post을 썼다. ViewController를 위임자로 설정하는 것을 잊지 마십시오.

- (void)viewDidLoad { 
     // State that you will take care of messages from graphView (provided you have the  protocol implementation!) 
     self.yourClass.delegate = self; 
    } 

그리고 ViewController의 메소드는 프로토콜 서명과 일치해야합니다. 그래서 ViewController.m

- (void) sendMyArray:(NSArray *)modelArray { 
    ICMfgFilterArray = array; 
    [self.tableView reloadData]; 
} 
+0

서늘 .. 실제로 지금이 일을 시작했다 .. 나는 과거에 viewcontrollers 사이에이를 사용했지만 지금은 nsobjectclass과의 ViewController .. 읽어 사이를 사용하여 몇 가지 문제가 있어요 당신의 블로그 지금 .. 감사합니다. –

+0

멋지다, 내가 어떻게 당신에게 도착하는지에 관해 알 수있다. .. –

+0

okay. 나는 꽤 많이 atm를 놓았다라고 생각한다. 하지만 내가 수업 시간에 viewcontroller에서 액세스하지 못하도록 내 수업을 설정했을 때 위의 질문을 업데이트 할 것입니다.하지만 내가 굶어 죽은 것처럼 점심 식사 후에 그렇게 할 것입니다. P는 당신이 프로토콜/델리게이트를 설정하는 방법을 확인해 주실 수 있다면 정말 대단 하시군요. –

관련 문제