2010-06-23 86 views
0

我有一個應用程序,並且必須創建另一個.h和.m文件。這是所以我的下載會有所回落的背景從另一個.m文件調用navcontroller

.h文件中

#import <UIKit/UIKit.h> 


@interface AsynchronousImageView : UIImageView 
{ 
    NSURLConnection *connection; 
    NSMutableData *data; 
} 

- (void)loadImageFromURLString:(NSString *)theUrlString; 

@end 

而且.m文件

#import "AsynchronousImageView.h" 
#import "DxxxAppDelegate.h" 



@implementation AsynchronousImageView 

- (void)loadImageFromURLString:(NSString *)theUrlString 
{ 
    [self.image release], self.image = nil; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:theUrlString] 
              cachePolicy:NSURLRequestReturnCacheDataElseLoad 
             timeoutInterval:30.0]; 

    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 

- (void)connection:(NSURLConnection *)theConnection 
    didReceiveData:(NSData *)incrementalData 
{ 
    if (data == nil) 
     data = [[NSMutableData alloc] initWithCapacity:2048]; 

    [data appendData:incrementalData]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection 
{ 
    self.image = [UIImage imageWithData:data]; 
    [data release], data = nil; 
    [connection release], connection = nil; 
} 

- (void)dealloc { 
    [data release]; 
    [connection release]; 
    [super dealloc]; 
} 

@end 

Basicilly,我進口我.h文件中爲我的主要xxx.appdelege所以我可以訪問一些導航控制器,以便推送視圖。

我基本上試圖下載一張圖片,然後一旦它完成,當下載開始時顯示一個視圖(加載視圖),並移除視圖(加載屏幕),並用UIImage推動主視圖。

我在網上發現這些文件,他們的工作,但我無法找到我可以做到這一點。任何選項?

我試着讓它如此,一旦它開始,我把使用加載一個觀點,那麼我卸載該屏幕和推動下

[navigationController pushViewController:vFullscreen animated:YES]; 

有人能幫助我嗎?我沿着這條路走了下來,因爲NSThread鎖定了,因爲我試圖訪問UI的東西。

感謝

當你從後臺UI線程工作,你應該叫

回答

1

[自performSelectorOnMainThread:@selector()withObject:waitUntilDone:]

當你試圖在後臺的東西

- 你應該拆分UI邏輯和後臺邏輯,很少在主線程上調用。

例如

在主線程:

  • 打開加載視圖控制器
  • 集回調目標和選擇器,用於後臺下載
  • 開始與後臺下載類
  • 等待下載從後臺下載器回撥
  • show next viewCo ntroller

在後臺線程(後臺下載)

  • 創建線程
  • 開始下載
  • 當下載完成 - 在主線程上執行回調選擇。

對於任何需要下載的對象,此邏輯可能會有用很多次。

p.s.檢查蘋果源代碼示例,常見情況下有許多有用的模板。

+0

謝謝:)我重寫代碼,看看我是否可以這樣做,而不是。 – user370507 2010-06-24 05:02:52

相關問題