ReactiveCocoa问题

时间:2015-04-23 13:39:21

标签: ios swift reactive-cocoa

我正在尝试在我的项目中使用ReactiveCocoa来处理UITableView的填充。

当我加载数据时,如果没有,我想将#include <Eigen/Core> #include <unsupported/Eigen/Splines> #include <iostream> class SplineFunction { public: SplineFunction(Eigen::VectorXd const &x_vec, Eigen::VectorXd const &y_vec) : x_min(x_vec.minCoeff()), x_max(x_vec.maxCoeff()), // Spline fitting here. X values are scaled down to [0, 1] for this. spline_(Eigen::SplineFitting<Eigen::Spline<double, 1>>::Interpolate( y_vec.transpose(), // No more than cubic spline, but accept short vectors. std::min<int>(x_vec.rows() - 1, 3), scaled_values(x_vec))) { } double operator()(double x) const { // x values need to be scaled down in extraction as well. return spline_(scaled_value(x))(0); } private: // Helpers to scale X values down to [0, 1] double scaled_value(double x) const { return (x - x_min) / (x_max - x_min); } Eigen::RowVectorXd scaled_values(Eigen::VectorXd const &x_vec) const { return x_vec.unaryExpr([this](double x) { return scaled_value(x); }).transpose(); } double x_min; double x_max; // Spline of one-dimensional "points." Eigen::Spline<double, 1> spline_; }; int main(int argc, char const* argv[]) { Eigen::VectorXd xvals(3); Eigen::VectorXd yvals(xvals.rows()); xvals << 0, 15, 30; yvals << 0, 12, 17; SplineFunction s(xvals, yvals); std::cout << s(12.34) << std::endl; } 的{​​{1}}属性设置为false。这是我到目前为止所做的:

$("#option_one").click(function() {
$("#input").val('Option 1');    
});

然而,错误说我需要等待网络请求完成。我正在使用Parse来获取数据,但我认为我的ReactiveCocoa代码没有正确设置并导致此错误。如果我注释掉hidden部分,表格会按预期填充。

如何以“反应方式”实现这一目标?

更新#1

这是dataSource的tableView.backgroundView函数

func loadData() {
    let dataSource = tableView.dataSource as! BlockedTableViewDataSource
    let load = dataSource.load(currentUser) # RACSignal

    load.map {
        return ($0 as! [AnyObject]).count > 0
    }.startWith(true).distinctUntilChanged().setKeyPath("hidden", onObject: tableView.backgroundView!)

    load.subscribeError({ error in
        println(error)
    }, completed: {
        self.tableView.reloadData()
        self.refreshControl?.endRefreshing()
    })
}

更新#2

load.map...

1 个答案:

答案 0 :(得分:1)

方法rac_findObjects()返回cold signal。这意味着每次有人订阅此信号时,将重复其副作用(即执行基础网络请求)。它似乎是PFQuery doesn't allow to send more than one simultaneous request,因此是错误消息。

在您的情况下,您正在为load信号进行两个订阅,因为调用setKeyPath也会创建一个。{1}}。因此网络请求会被执行两次,这会导致您发布的错误。

正如链接的GitHub问题所示,您可以使用RACMulticastConnection来确保副作用(网络请求)只执行一次,无论有多少订阅者。例如:

let load = dataSource.load(currentUser).publish().autoconnect()