从NSObject类调用ViewController方法

时间:2012-03-12 21:32:14

标签: iphone ios uitableview nsobject reloaddata

我正在尝试从一个NSObject类调用我的ViewController中的方法进行一些解析。

我最初调用了一个连接类,我已经从我的服务器下载了一些数据,然后我将这些数据传递给我所做的解析器类,现在我要做的就是将这些数据传递回viewcontroller,重新加载此视图中的tableview(在导航堆栈上的那个)

无论如何这会导致一些错误,我认为这可能是我尝试调用此方法的方式。这就是我怎么称呼它。

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

现在我认为这会导致问题,因为我正在分配一个新的viewcontroller对象?是对的..不确定的终结..但是... ..

其结果是reloaddata只调用

  • numberOfSectionsInTableView
  • 的tableView:numberOfRowsInSection
那就好了。 任何帮助将不胜感激。

更新: 所以我正在尝试设置一个协议/委托,看看是否能解决我的问题。

所以在我的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 个答案:

答案 0 :(得分:1)

这样做的一种方法是代表和协议的推荐方法。 您的NSObject声明协议。 ViewController实际上实现了协议并将自己设置为委托。然后NSObject调用该方法(不知道是谁实现它)。它是一种松散耦合的对象之间的通信方式。

如果你感兴趣的话,我最近在协议和代表的基本介绍上写了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]; 
}
相关问题