我有一个应用程序,并且必须创建另一个.h和.m文件。这是我的下载将在后台下载
.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,我为我的主xxx.appdelege导入了我的.h文件,这样我就可以访问一些导航控制器,这样我就可以推送视图了。
我基本上试图下载一张图片,然后在下载开始时完成显示一个视图(加载视图)并删除视图(加载屏幕)并用UIImage.view推送主视图。
我在网上找到这些文件,它们有效,但我无法找到我能做到这一点。有什么选择吗?
我试图这样做,一旦它开始,我推动一个视图使用加载,然后我卸载该屏幕并推下面
[navigationController pushViewController:vFullscreen animated:YES];
有人可以帮助我吗?我走了这条路,因为NSThread被锁定了,因为我试图访问UI的东西。
由于
答案 0 :(得分:1)
当你从后台线程使用UI时,你应该调用[self performSelectorOnMainThread:@selector()withObject:waitUntilDone:]
当你试图在后台制作东西时 - 你应该拆分UI逻辑和后台逻辑,以便很少在主线程上进行调用。
例如
主线程中的:
在后台线程(后台下载器)
对于您需要下载的任何对象,此逻辑可能会多次使用。
P.S。检查苹果源示例有很多有用的常见情况模板。