如何从另一个类中的类调用方法

时间:2012-11-17 00:20:07

标签: objective-c

我正在为一个新的mac osx应用程序工作,我正在使用拖放系统让用户输入一些文件[这部分工作正常]我有一个tabelView我想要显示输入的文件路径。 我在tabelViewController.m中有下一个方法:

-(void)add{
    NSLog(@"da");
    [list addObject:[[Source alloc] init]];
    [tableView reloadData];
}

在DropView.m中,我包含了tabelViewController.h,我试图调用add方法,但它什么也没做:

#import "TableViewController.h"
.....
- (void)concludeDragOperation:(id<NSDraggingInfo>)sender{
    [self setNeedsDisplay:YES];
    TableViewController *tvc;
    [tvc add];
}

有人可以弄清楚它为什么不做任何事情吗?

EDIT1: 我休息了答案后,我的concludeDragOperation方法如下所示:

- (void)concludeDragOperation:(id<NSDraggingInfo>)sender{
    [self setNeedsDisplay:YES];
    TableViewController *tvc = [[TableViewController alloc] init];
    [tvc add];
    [tvc rD];
}

rD是tableViewController中包含reloadData方法的方法。 但它不想工作它不重新加载表视图。 任何想法???

2 个答案:

答案 0 :(得分:1)

tvc需要指向一个实际的对象。 [[tvc alloc] init] 否则,您只需在nil上调用add。这不会导致您的程序崩溃,就像您在其他语言中所期望的那样。试一试,看看会发生什么。

答案 1 :(得分:1)

好像你错过了关于OOP和Objective-C是如何工作的一大块(严肃而言,没有冒犯)。

DropView.m和tableViewController.h之间有什么联系吗?

通过键入TableViewController *tvc;,您所做的就是创建一个指针。您既没有创建对象也没有指向对象,您只需创建一个可以最终指向tableViewController类型的内存中的对象的指针。

<强>解决方案:

您需要做的是以某种方式在两个类之间创建链接。例如,您可以为DropView创建一个自定义委托方法,该方法可以与使用该自定义DropViewDelegate方法的任何类进行通信。因此,您可以创建一个委托方法,告诉您刚刚完成拖动操作的委托协议之后的对象。我的blog [这是一个固定链接]可以找到如何操作的教程。

我很乐意发布代码,或者您可以在我的博客上阅读。祝你好运。