我正在为一个新的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方法的方法。 但它不想工作它不重新加载表视图。 任何想法???
答案 0 :(得分:1)
tvc
需要指向一个实际的对象。 [[tvc alloc] init]
否则,您只需在nil
上调用add。这不会导致您的程序崩溃,就像您在其他语言中所期望的那样。试一试,看看会发生什么。
答案 1 :(得分:1)
DropView.m和tableViewController.h之间有什么联系吗?
通过键入TableViewController *tvc;
,您所做的就是创建一个指针。您既没有创建对象也没有指向对象,您只需创建一个可以最终指向tableViewController类型的内存中的对象的指针。
<强>解决方案:强>
您需要做的是以某种方式在两个类之间创建链接。例如,您可以为DropView创建一个自定义委托方法,该方法可以与使用该自定义DropViewDelegate方法的任何类进行通信。因此,您可以创建一个委托方法,告诉您刚刚完成拖动操作的委托协议之后的对象。我的blog [这是一个固定链接]可以找到如何操作的教程。
我很乐意发布代码,或者您可以在我的博客上阅读。祝你好运。