2013-04-02 2 views
1

J'ai une application qui exécute un algorithme de synchronisation. Lorsque je compile et que je l'exécute en mode débogage (sur mon iPhone 5), tout fonctionne correctement.Différence entre le débogage et la publication

Cependant, lorsque je l'archive et le télécharge sur TestFlight, puis le télécharge et l'installe sur le même iPhone 5, une partie de la synchronisation ne fonctionne pas.

Il ne plante pas ou quoi que ce soit, il n'exécute tout simplement pas cette partie de la synchronisation. La chose stupide est que c'est une ligne de code à l'intérieur d'une seule fonction qui n'est pas en cours d'exécution. Tout le reste dans cette fonction s'exécute.

Je n'ai aucune idée par où commencer à chercher cela.

EDIT

Avec l'aide de Mindaugas que j'ai trouvé exactement pourquoi et quel bit de code n'est pas en cours d'exécution.

La fonction est ...

- (void)uploadData 
{ 
    NSLog(@"pushing photos"); 
    for (StoredImage *storedImage in self.recordArray) { 
     NSURL *url = [self urlForImageUpload:storedImage]; 

     if (url == nil) { 
      continue; 
     } 

     ImageUploadOperation *uploader = [[OJFImageUploadOperation alloc] init]; 
     uploader.image = storedImage.image; 
     uploader.url = url; 
     [self.recordQueue addOperation:uploader]; 
    } 
} 

Quand je mets le niveau d'optimisation pour « le plus rapide, le plus petit », il semble gâcher l'ordre de cette fonction vers le haut.

Quand il entre je peux voir qu'il y a un seul objet dans le tableau et qu'il entre dans la boucle. Mais alors, il saute complètement la première ligne NSURL *url = [self urlForImageUpload:storedImage]; et va à la fin. Le téléchargement ne démarre donc jamais et passe à l'élément suivant.

+0

Ma seule pensée est que si l'appel est à l'intérieur d'une méthode NSAssert, il se transformera en un no-op. – borrrden

+0

Votre application a-t-elle le privilège d'effectuer une telle opération? –

+0

Je n'utilise pas NSAssert à ce stade. J'ajoute juste quelques points de contrôle TestFlight pour savoir exactement quel bit n'est pas exécuté. – Fogmeister

Répondre

9

configuration Edition utilise par défaut différente optimisation de code de configuration de débogage, de sorte que certaines lignes de code peuvent être optimisés et sauté

Vous pouvez vérifier/modifier les configurations à Target -> Créer Paramètres -> Recherche pour l'optimisation Niveau

+0

Merci! J'ai maintenant été capable de le répliquer en changeant le niveau d'optimisation de débogage à "Fastest-Smallest". Cependant, je ne sais pas pourquoi cela a un effet? – Fogmeister

+0

Cest ce que l'optimisation est pour. Si le compilateur pense que certaines lignes de codes ne produisent aucune sortie, et n'ont aucune influence sur les autres parties, il saute cela .. Je suppose que d'autres peuvent élaborer sur ce sujet .. – Mindaugas

+0

Ah, merci encore. Eh bien, j'ai regardé de plus près et je sais maintenant (avec votre aide) exactement quel bit n'est pas utilisé. Je vais ajouter à la question. – Fogmeister

Questions connexes