从另一个.m文件调用navcontroller

时间:2010-06-23 17:45:04

标签: iphone objective-c

我有一个应用程序,并且必须创建另一个.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的东西。

由于

1 个答案:

答案 0 :(得分:1)

当你从后台线程使用UI时,你应该调用[self performSelectorOnMainThread:@selector()withObject:waitUntilDone:]

当你试图在后台制作东西时 - 你应该拆分UI逻辑和后台逻辑,以便很少在主线程上进行调用。

例如

主线程中的

  • 打开加载视图控制器
  • 为后台下载程序设置回调目标和选择器
  • 使用后台下载程序类开始下载
  • 等待来自后台下载程序的回调
  • 显示下一个viewController

在后台线程(后台下载器)

  • 创建线程
  • 开始下载
  • 下载完成时 - 在主线程上执行回调选择器。

对于您需要下载的任何对象,此逻辑可能会多次使用。

P.S。检查苹果源示例有很多有用的常见情况模板。