1

我正在为 mac osx 开发一个新应用程序,在该应用程序中我使用拖放系统让用户输入一些文件 [这部分效果很好],并且我有一个 tabelView,我想在其中显示文件的路径输入。我在 tabelViewController.m 中有下一个方法:

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

在 DropView.mi 中包含了 tabelViewController.h,我正在尝试调用 add 方法,但它什么也不做:

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

有人可以弄清楚为什么它什么都不做吗?

Edit1:好的,在我放弃答案后,我的 finallyDragOperation 方法如下所示:

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

rD 是来自 tableViewController 的方法,其中包含 reloadData 方法。但它不想工作它不重新加载表格视图。有什么想法???

4

2 回答 2

1

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

于 2012-11-17T00:22:26.520 回答
1

似乎您错过了很多关于 OOP 和 Objective-C 如何工作的内容(说真的,没有冒犯)。

DropView.m 和 tableViewController.h 之间有什么链接?

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

解决方案:

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

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

于 2012-11-17T00:50:31.487 回答