【问题标题】:Call a ViewController method from NSObject Class从 NSObject 类调用 ViewController 方法
【发布时间】:2012-03-12 21:32:13
【问题描述】:

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

我最初调用了我创建的连接类,它从我的服务器下载了一些数据,然后我将这些数据传递给我创建的解析器类,现在我想要做的是将这些数据传递回视图控制器和重新加载此视图中的表格视图(位于导航堆栈上)

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

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]; 
}

【问题讨论】:

    标签: iphone ios uitableview nsobject reloaddata


    【解决方案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]; 
    }
    

    【讨论】:

    • cool.. 实际上我现在才刚刚开始这样做.. 我过去在 viewcontrollers 之间使用过这个,但现在在 nsobjectclass 和 viewcontroller 之间使用它时遇到了一些问题.. 现在会阅读你的博客。 . 谢谢。
    • 好吧.. 我想我已经把它设置好了。但是,当我调用我在课堂上设置的协议时,它永远不会从视图控制器访问它。我将用我所做的一切更新我上面的问题,但会在午餐后因为我饿了:P 会如果你能检查一下我是如何设置协议/委托的,那就太棒了..
    • 谢谢.. 刚刚尝试使用 self.myClass.delegate = self;并给出一个错误提示 - proerty 'myClass' not found an object of type viewController
    • 好的,因此您需要将类连接到控制器,例如,将类作为控制器上的属性。或者让另一个对象将视图控制器设置为该类的委托。需要设置一些东西。取决于您的系统是如何设计的。
    • 是不是同一件事是将参数添加到.h的接口中,就像这样 interface VehicleSearchViewController : UITableViewController {
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多