我一直在使用一个MVVM example,使用ReactiveCocoa,它是一个集合视图中的App.net帖子的简单集合,它在点击集合视图的边缘之前加载更多的帖子。RACCommand初始化器信号没有命中执行信号
但是,我有一个问题,在我的视图模型上有一个命令。我已经创建了一个通过AFNetworking客户端加载帖子的命令,并在建模之后回应。当它完成时,它将响应发送到创建的命令的信号,并完成信号。
self.loadPostsCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[[EPHTTPClient sharedClient] getGlobalTimelinePostsWithSuccess:^(NSURLSessionDataTask *task, id responseObject) {
[self.posts addObjectsFromArray:responseObject];
[subscriber sendNext:responseObject];
[subscriber sendCompleted];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
[subscriber sendError:error];
}];
return nil;
}];
}];
在我看来,我创建了一个信号来发送剩余的帖子数量。
@weakify(self);
RACSignal *postsRemainingSignal = [[RACObserve(self.collectionView, contentOffset) map:^(id value) {
// The value returned from the signal will be an NSValue
CGPoint offset = [value CGPointValue];
NSNumber *postsPassed = @(floorf(offset.x/320) + 1);
return @([self.postQueue.posts count] - [postsPassed integerValue]);
}] distinctUntilChanged];
我将这些值发送到我的视图模型上的主题。
// Send the values of the posts to the view model
[postsRemainingSignal subscribeNext:^(id x) {
[self.postQueue.postsRemainingSubject sendNext:x];
}];
// When the load command is executed, update our view accordingly
[self.postQueue.loadPostsCommand.executionSignals subscribeNext:^(RACSignal *loadSignal) {
[loadSignal subscribeCompleted:^{
@strongify(self);
[self.collectionView reloadData];
}];
}];
在视图模型的对象实例化这样的:
// Create a subject to send view values to
self.postsRemainingSubject = [RACSubject subject];
// Load more posts when less than 4 posts remain
[self.postsRemainingSubject subscribeNext:^(id x) {
if ([x integerValue] < 4) {
[self.loadPostsCommand execute:nil];
}
}];
一切正常,除了送价值和完成我的命令的信号。网络请求发生,我的帖子被建模,但是,该视图永远不会收到self.postQueue.loadPostsCommand.executionSignals
信号上的任何值。
再次,my project is on GitHub在分支reload-signal-rework。有什么想法吗?
你能更新你的回购?我试图深入研究这个问题,但回购的代码与此问题中的代码不同。 –
检查分支reload-signal-rework这里:https://github.com/eliperkins/MVVMExample/tree/reload-signal-rework –
我看不懂,请接受道歉。 –