2013-05-14 1 views
0

J'ai un problème. J'ai donc un code qui met à jour le nom de la chanson et l'image de php. Song nom de travail et également mis à jour, mais l'image ne fonctionne pas, dans le fichier php tout le travail, mais dans mon projet - non. Comment faire une mise à jour de l'image de l'url après 10 sec par exemple. Merci.Comment mettre à jour l'image d'une URL dans l'application OS X?

-(void)viewWillDraw { 

    NSURL *artistImageURL = [NSURL URLWithString:@"http://site.ru/ParseDataField/kiss.php?image"]; 

    NSImage *artistImage = [[NSImage alloc] initWithContentsOfURL:artistImageURL]; 

    [dj setImage:artistImage]; 

    dispatch_queue_t queue = dispatch_get_global_queue(0,0); 

    dispatch_async(queue, ^{ 

    NSError* error = nil; 

     NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ru/ParseDataField/kiss.php?artist"] 

               encoding:NSASCIIStringEncoding 
                error:&error]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 

      [labelName setStringValue:text]; 


     }); 
    }); 
} 
+0

Non "dans Xcode". Xcode est un IDE et vous ne pouvez pas le modifier. Je suppose que vous voulez faire cela dans votre application OS X? –

+0

Oui dans l'application OS X –

Répondre

0

Vous devriez vraiment envisager de placer quelque part ce code autre que -viewWillDraw. Cette routine peut être appelée plusieurs fois pour la même NSView dans certaines circonstances et, plus important encore, vous devez appeler [super viewWillDraw] pour vous assurer que les choses vont bien dessiner correctement (si quelque chose est dessiné dans la vue elle-même).

Pour des mises à jour périodiques (par exemple toutes les 10 secondes), vous devriez envisager d'utiliser NSTimer pour déclencher la récupération de l'objet suivant.

Quant à la question générale de savoir pourquoi votre image n'est pas dessiné correctement, vous devriez probablement envisager de mettre le code de récupération d'image et le dessin dans la même structure que votre recherche d'étiquette et code de dessin. Ceci obtiendra l'appel de la méthode [dj setImage: artistImage] en dehors de la chaîne viewWillDraw ce qui est susceptible de causer quelques difficultés ici.

+0

Lorsque j'écris le code de temporisateur NSTimer * t = [NSTimer scheduledTimerWithTimeInterval: 0,40 cible: self selector: @selector (mis à jour :) userInfo: nil repeat: NO]; J'ai très lentement le travail de mon application, et après que mon application se fermera avec une erreur ... –

+0

Il y a énormément de variation possible dans ce que vous avez pu faire dans votre routine 'update:'. Vous ajoutez un délai de 0,4 seconde avec le minuteur tel que vous l'avez écrit, donc c'est probablement une partie du délai, comme peut l'être la réponse du serveur. Heureusement, vous n'appelez pas 'NSTimer' depuis' viewWillDraw', car cela poserait des problèmes similaires à 'viewWillDraw'. – gaige

Questions connexes