Slide 31
Slide 31 text
Following a person
// Following a person
- (void)follow:(void (^)(Person *person, NSError *error))resultBlock {
__weak __typeof(self) weakSelf = self;
// Saving original for later usage
Person *original = self.person;
// Create fake result
Person *fake = [self.person copy];
fake.followingStatus = @"Following";
// Updating current object
self.person = fake;
resultBlock(fake, nil);
// Calling request manager
[self.requestManager followPerson:original result:^(Person *updatedPerson, NSError *error) {
if (error) {
// rollback
weakSelf.person = original;
resultBlock(original, error);
} else {
// Updating to the new value
weakSelf.person = updatedPerson;
resultBlock(updatedPerson, nil);
}
}];
}
Paul Taykalo, Optimistic Approach : How to show results instead spinners without breaking your Application, Stanfy, 2015 31