2013-05-14 54 views
0

我有一些問題。所以我有更新歌曲名稱和圖片從PHP的代碼。歌名工作,也更新,但圖片不工作,在PHP文件中的所有工作,但在我的項目 - 不。例如,10秒後如何從url更新圖片。謝謝。如何從OS X應用程序中的URL更新圖像?

-(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

不是「在Xcode中」。 Xcode是一個IDE,你不能修改它。我假設你想在你的OS X應用程序中做到這一點? – 2013-05-14 09:03:32

+0

是在OS X應用程序 – 2013-05-14 09:13:06

回答

0

你真的應該考慮把比-viewWillDraw其他這段代碼的某個地方。在某些情況下,對於相同的NSView,此例程可以被多次調用,更重要的是,您需要調用[super viewWillDraw]以確保事物實際繪製正確(如果視圖中繪製了任何內容)。

對於定期更新(例如每10秒),您應該考慮使用NSTimer來觸發下一個對象的檢索。

至於爲什麼您的圖像繪製不正確的一般問題,您應該考慮將圖像檢索和繪圖代碼放入與標籤檢索和繪圖代碼相同的結構中。這將在viewWillDraw鏈之外獲得[dj setImage: artistImage]方法調用,這可能會在此造成一些困難。

+0

當我寫定時器代碼NSTimer * t = [NSTimer scheduledTimerWithTimeInterval:0.40 target:self selector:@selector(updated :): userInfo:nil repeats:NO];我的應用程序的工作非常緩慢,在我的應用程序關閉後會出現一些錯誤... – 2013-05-14 12:13:33

+0

在您的'update:'例程中可能做了很多可能的變化。正如你寫的那樣,你正在爲計時器增加一個0.4秒的延遲,所以這可能是延遲的一部分,可能是服務器的響應。希望你沒有從'viewWillDraw'內部調用'NSTimer',因爲這在執行'viewWillDraw'中的工作時會遇到類似的問題。 – gaige 2013-05-14 12:18:09

相關問題