Skip to content

Instantly share code, notes, and snippets.

@ov1d1u
Created February 8, 2016 17:27
Show Gist options
  • Save ov1d1u/781b27615f1d97b0b8b5 to your computer and use it in GitHub Desktop.
Save ov1d1u/781b27615f1d97b0b8b5 to your computer and use it in GitHub Desktop.
Hello!
## Canale
So, ca sa te abonezi la update-urile venite de la Telepat (cele pentru obiecte, mai jos cele pentru contexte) intai faci subscribe:
[[Telepat client] subscribe:context modelName:@"polls" classType:[IABMPoll class] withBlock:^(TelepatResponse *response) {
// context: TelepatContext-ul la care vrei sa te abonezi
// @"polls": numele modelului
// classType: tipul obiectelor pe care il astepti din subscription, pentru ca Telepat sa stie ce sa iti returneze
}];
Apoi te abonezi via `NSNotificationCenter` cam asa:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData:) name:TelepatChannelObjectUpdated object:nil];
Pentru ca acum in `updateData:` o sa iti vina gramada update-urile pentru toate obiectele din canalele la care esti abonat probabil primul lucru pe care o sa il vrei sa faci in metoda asta e sa:
if (![notification.userInfo[kNotificationObject] isKindOfClass:[IABMPoll class]]) return;
Acuma in `notification.userInfo` asta o sa ai asa:
*kNotificationObject*: obiectul gata instantiat si actualizat
*kNotificationPropertyName*: proprietatea care a fost actualizata
*kNotificationValue*: valoarea proprietatii
*kNotificationOrigin*: originea de unde a venit notificarea (la subscribe primesti obiectele si ca raspuns la subscribe si ca notificari de tip `TelepatChannelObjectAdded`; dupa cheia asta poti sa iti dai seama de unde vin obiectele)
De aici depinde ce vrei tu sa faci, pe langa `TelepatChannelObjectUpdated` pe care ti l-am prezentat mai ai si `TelepatChannelObjectAdded` si `TelepatChannelObjectDeleted` care functioneaza asemanator.
Ca sa actualizezi tu un obiect faci asa:
TelepatUser *user = .....; // presupunand ca ai deja o instanta user pe undeva
TelepatUser *updatedUser = [user copy];
updatedUser.name = @"Cristi";
[channel patch:updateUser]; // si de acum Telepat o sa creeze patch-ul automat si o sa il trimita spre backend
Ca alternativa la `patch:` mai ai si
- (NSString *) patch:(TelepatBaseObject *)object withBlock:(void (^)(TelepatResponse *response))block;
asta daca vrei sa si primesti o confirmare pentru actiunea de patch. Poti sa obtii si tu patch-ul manual facand:
NSDictionary *patch = [user patchAgains:updatedUser];
asta daca o sa iti trebuiasca candva chestia asta...
## Contexte
Update-urile la contexte vin pur si simplu, fara sa te abonezi nicaieri, insa cand te abonezi la `NSNotificationCenter` va trebui sa o faci dupa `TelepatContextAdded`, `TelepatContextUpdated` sau `TelepatChannelObjectDeleted`, dupa caz.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment