0

想象一下,我想在后台调用这个方法。

- (void)loadView
{
    [super loadView];
    //Make a button which will fire the "buttonClicked" method
    //Make my own uitableview.
    //Fire method: "theBackGroundMethod" in the background.
}

我对含糊不清感到抱歉,但我会尽量做到清楚。以下是我想要做的。我有一个视图,但它上面有这个按钮和一个空的 UITableView。然后我希望BackGroundMethod 运行背景,在运行时我希望能够单击按钮并触发buttonClicked 方法,该方法会将数据发送到UITableView。

以下我尝试了负面结果:

[self performSelectorInBackground:@selector(theBackGroundMethod) withObject:nil];

这将启动BackGroundMethod,但它不会加载我从服务器询问的数据。

[self performSelectorOnMainThread:@selector(theBackGroundMethod) withObject:nil waitUntilDone:NO];

这会启动BackGroundMethod,但由于某种原因它不允许我单击按钮,它允许单击按钮,但是我在方法触发点击时所做的每一个动作都放在它后面的队列中,所以只有当backgroundmethod完成了我按下按钮的 x 次处理。

有谁知道什么可能会阻止使用上述任何 performSelector 函数以及如何解决它们。或者有一个完整的(也许更好的)想法..?

4

3 回答 3

0

如果您正在运行异步 URL 请求或类似的东西,则需要在请求所在的线程中运行 runloop。这就是为什么它在已经有一个运行循环的主线程上工作的原因。

于 2011-10-11T08:09:10.063 回答
0

我有同样的问题,我使用的是 UITable 所以在后台运行的方法中,在它的最后我添加了这一行

[self.tableView reloadData];

我不知道您是否使用表格视图,但这可能会让您以某种方式解决您的问题,我应该感谢您在后台运行;)

于 2011-10-17T12:44:14.793 回答
-1

请尝试:

[NSThread detachNewThreadSelector:@selector(theBackGroundMethod:) toTarget:self withObject:nil];
于 2011-10-10T15:39:27.553 回答