我一直在使用一個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 –
我看不懂,請接受道歉。 –