我正在尝试从一个NSObject类调用我的ViewController中的方法进行一些解析。
我最初调用了一个连接类,我已经从我的服务器下载了一些数据,然后我将这些数据传递给我所做的解析器类,现在我要做的就是将这些数据传递回viewcontroller,重新加载此视图中的tableview(在导航堆栈上的那个)
无论如何这会导致一些错误,我认为这可能是我尝试调用此方法的方式。这就是我怎么称呼它。
MyViewController *myViewController = [[MyViewController alloc] init];
[myViewController initFilterArray:filteredArray];
现在我认为这会导致问题,因为我正在分配一个新的viewcontroller对象?是对的..不确定的终结..但是... ..
其结果是reloaddata只调用
更新: 所以我正在尝试设置一个协议/委托,看看是否能解决我的问题。
所以在我的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];
}
答案 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];
}