Je poste des entrées à partir d'un magasin de données de base persistant de manière asynchrone vers un serveur Web. Je souhaite supprimer chaque objet géré associé après un post réussi.Objectif c Aide sur les délégués personnalisés et les données asynchrones
Mon problème est que je suis en train de remplir le magasin et de créer des postes de façon à ce que je ne puisse pas effectuer une opération de publication/suppression en série. Y at-il un moyen de marquer un objet pour la suppression jusqu'à ce qu'il soit associé connectionDidFinishLoading
appel a été fait, puis supprimez-le?
Je suppose également qu'en utilisant NSURLRequests
asynchrone, l'application engendre plusieurs NSURLConnections
et les exécute simultanément. Ai-je tort dans cette hypothèse?
(Mise à jour) Grâce au conseil d'Uberhamster, j'ai essayé d'utiliser des délégués mais j'échoue. C'est ainsi que je vais aborder ce problème. J'ai déclaré un protocole dans la classe qui gère les messages car c'est là que connectionDidFinishLoading
vit.
@protocol postDelegate
@optional
- (void)postCompleted;
@end
@interface makePosts : NSObject {
//...
id <postsDelegate> delegate;
}
@property (nonatomic, assign) id <postsDelegate> delegate;
//...
@end
@implementation makePosts
@synthesize delegate;
//...
- (void) connectionDidFinishLoading {
[delegate postCompleted];
}
//...
@end
Et dans la classe qui saisit les données de la mémoire persistante et engendre NSURLConnections
ce que je fais:
@interface myClass <postsDelegate>
//...
makePosts* makePostsObject;
@end
@implementation myClass
- (void) batchPost {
//...
for(NSManagedObject* obj in items) {
makePostsObject = [[makePosts alloc] init];
makePostsObject.delegate = self;
[makePostsObject setEntryName:[obj valueForKey:@"name"]]; // set reference here
NSString* post_data = [NSString stringWithString:[self createXMLPost:obj]];
[makePostsObject postdata:[obj valueForKey:@"name"]];
[makePostsObject release];
}
- (void) postCompleted
{
NSLog(@"posted entry for: %@", makePostsObject.entryName);
}
@end
Je pense que ce que je fais mal fait myClass
le délégué? postCompleted
est appelé pour chaque publication que je fais, mais la référence est chaque fois pour le dernier message. Y a-t-il un moyen de récupérer le délégué de la fonction de rappel?
La libération automatique de l'objet délégué à la création a pris en charge les fuites de mémoire.MyUploadDelegate * delegate = [[[MyUploadDelegate alloc] init] autorelease]; J'ai testé et ne peux pas trouver des cas de pointe où il échouerait. – CodeWombat
Sauf que vous n'avez aucun moyen d'annuler une connexion, par exemple lorsque vous passez en arrière-plan ou lorsqu'un appel arrive. Garder le suivi du délégué et la connexion est un bon citoyen sur l'appareil. –