2010-06-23 52 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

相关问题