2012-03-12 2 views
2

Я пытаюсь вызвать метод, который находится в моем ViewController из класса NSObject, который выполняет некоторый синтаксический анализ.Вызвать метод ViewController из NSObject Класс

Я начал созывать класс связи, который я сделал, загружая некоторые данные с моего сервера, затем передаю эти данные классу парсера, который я сделал, теперь я пытаюсь передать эти данные обратно в viewcontroller и перезагрузите представление таблицы в этом представлении (это в стеке навигации)

В любом случае это вызывает некоторые ошибки, и я думаю, что это может быть так, как я пытаюсь назвать этот метод, который это делает. вот как я это называю.

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

Теперь я думаю, что это вызывает проблему, потому что я выделяю новый объект viewcontroller? является то, что правильно .. не уверен в terminoligy .. но да ..

результатом которого является то, что reloaddata только вызовом

  • numberOfSectionsInTableView
  • Tableview: numberOfRowsInSection

то вот оно. любая помощь будет оценена.

UPDATE: , поэтому я пытаюсь настроить протокол/делегат, чтобы узнать, устраняет ли это мою проблему.

так в моем class.h это то, что я делаю

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

затем в class.m

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

так вот мой класс, то над на мой взгляд, контроллер, где я хочу называем это sendMyArray я делаю это

viewcontroller.h

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

тогда я называю это, как этот

viewcontroller.m // ..

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

ответ

1

Один из способов сделать это было бы рекомендуемый подход делегатов и протоколов. Ваш NSObject объявляет протокол. ViewController фактически реализует протокол и устанавливает себя как делегат. Затем NSObject вызывает метод (не зная, кто его реализует). Это свободно связанный способ общения между объектами.

Я действительно недавно написал blog post на основном введение в протоколы и делегатов, если вы заинтересованы ...

UPDATE

На основе вашего обновления выше в вопросе. Не забудьте установить ваш 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

все в порядке .. думаю, что я в значительной степени поставил atm. Но когда я вызываю свой протокол, который я установил в своем классе, он никогда не обращается к нему из диспетчера представлений. Я собираюсь обновить свой вопрос выше всем, что я сделал, но сделаю это после обеда, пока я голоден: P будет будь удивительным, если бы вы могли проверить, как im настраивает протокол/делегат .. –

Смежные вопросы