我有一个tableview,就像stackoverflow一样,用户可以选择一个最好的答案。
我有一个* answerContainers的NSMutableArray,它包含一个Answer对象。
让我们说这个问题有10个答案。提出问题的用户选择第3个答案为最佳答案。
我启动了一个调用,将答案标记为服务器上的最佳答案,结果是更新的Answer对象,我想在完成块中操作。
所以它看起来像这样...
- (void)selectBestAnswer {
for (AnswerContainer *answerContainer in self.answerContainers) {
if (answerContainer.selected) { //can only be 1 selected
Answer *answer = answerContainer.answer;
QuestionDetailTableViewController * __weak weakSelf = self;
[answer markAsBestAnswer:^(BOOL success, id responseObject, NSInteger statusCode, NSArray *messages, NSArray *errors) {
if (success) {
QuestionDetailTableViewController *strongSelf = weakSelf;
Answer *answer = [Answer instanceFromDictionary:responseObject];
[strongSelf replaceAnswerWithAnswer:answer];
[strongSelf reloadTableView];
}
}];
}
}
}
以下是我的问题
1)我应该像整个控制器那样做自己的弱点,就像这样。或者你通常只对answerContainer说这个吗?
答案 0 :(得分:2)
把所有“弱”的东西扔掉。只有在块保留self
并且self
保留块的非常特殊的情况下才需要它,从而导致保留周期使self
稍后泄漏。你不是那种情况所以不要使用“弱强舞”。
答案 1 :(得分:0)
如果您只有一个选定的答案,为什么不- (void)bestAnswerSelected:(Answer *)answer
- (void)sendAndUpdateBestAnswer:(Answer *)answer {
[answer markAsBestAnswer:^(BOOL success, id responseObject, NSInteger statusCode, NSArray *messages, NSArray *errors) {
if (success) {
Answer *answer = [Answer instanceFromDictionary:responseObject];
[self replaceAnswerWithAnswer:answer];
[self reloadTableView];
}
}];
}
我认为selectBestAnswer
是ins