Question

Historique

J'écris une partie de mon application qui n'a pas l'interface utilisateur. Il se trouve en arrière-plan regarder ce que vous faites et le calendrier de votre travail.

Il ne faut pas se chevauchent parfois, et il devrait y avoir aucune rupture dans les données de temps. S'il y a une ou l'autre de ces choses, l'application a un bug quelque part et je dois être informé.

Ce que je veux

Une classe appelée JGDataIntegrityController qui effectue les opérations suivantes:

  1. Vérifiez la banque de données pour les temps en double. Numérisez depuis la dernière date du rapport en double stocké dans NSUserDefaults.

  2. Si les temps en double sont trouvés, construire un rapport.

  3. Envoyer le rapport.

    Si l'envoi ne réussit pas, puis la sortie. Sinon continuer.

  4. Supprimer les doublons

  5. Mise à jour du dernier rapport en double date dans NSUserDefaults

  6. Répéter l'opération pour les pauses de données.

ce que j'ai

Je l'ai fait une classe de base qui fait tout le travail acharné de l'envoi du rapport.

diagramme de classes http://synapticmishap.co.uk/ReportClasses.jpg

JGReportSender a le code suivant:

-(void)postReport:(NSString *)report {
    NSMutableDictionary *form = // Dictionary Holding Report;
    NSURLRequest *request = [NSURLRequest requestWithURL:@"http://postURL" postForm:form];
    [NSURLConnection connectionWithRequest:request delegate:self];
}

Où je suis rester coincé

Que dois-je faire lorsque le rapport a été envoyé?

Les méthodes de délégué:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error

sont appelés lorsque le rapport a été envoyé. Mais comment dois-je communiquer avec JGDataIntegrityController?

Mon idée Crap

Mon idée est d'avoir une propriété reportStatus NSNumber dans JGReportSender. Puis, quand les méthodes de délégués s'appellent, cela est mis à jour.

reportStatus = 1 signifie "rapport envoyé OK".

= 2 reportStatus signifie "envoi accusé de problème".

Je pourrais ajouter un observateur reportStatus pour JGDataDuplicateReportSender et JGDataBreakReportSender. Ce serait alors gérer le rapport envoi erreur ou continuer.

Toutes les bonnes idées?

Je reçois le sentiment que c'est une façon vraiment le désordre de le faire. Je pense aussi que je suis sur quelque chose vraiment évident.

Toutes les idées comment faire cela d'une manière propre?

Mise à jour

Je suis totalement oublié de mentionner - ce sera un opt 100% en fonction. Elle sera désactivée par défaut. Il faudra aussi 3 niveaux de la vie privée - de « une pause de données a eu lieu » à « une rupture de données produite après cette application a été actif avec ce chemin du document ». Et les rapports seront également anonymes.

Je suis conscient de tous les problèmes de confidentialité - est ce que je puisse rendre le logiciel plus, pas si je peux espionner les gens

Était-ce utile?

La solution

Donner l'expéditeur du rapport une propriété delegate et protocole, avec au moins deux méthodes: reportSenderDidSucceed: et reportSender:failedWithError:. L'expéditeur du rapport envoie ce dernier message de sa méthode connection:didFailWithError:, en passant le long de l'objet d'erreur, il a.

J'espère que vous allez faire de cette option. Attendez-vous à beaucoup de messages en colère / curieux des utilisateurs (sans parler des avertissements publics de « ne pas utiliser cette application, car il téléphone à domicile » sur les pages Web) si vous ne le faites pas.

Autres conseils

Juste un mot pour dire si quelqu'un veut un bon tutoriel sur la mise en œuvre de vos propres délégués Peter suggère que je fais, je trouve celui-ci:

http://cocoadevcentral.com/articles/000075.php

Check it out. Il est excellent!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top