NSData返回0个字节

时间:2012-04-01 11:05:57

标签: iphone ios objective-c xcode ios5

我正在尝试以下列方式加载图像。但是当我在我的loadImageFromURL:(NSURL*)inURL中将[self loadImagesFromURL:url]函数称为tableView时显示0字节。 如何在(delta)NSData?中获取tableview的值,该值被声明为全局...

NSURLConnection* connection;
NSMutableData* delta;

- (void)loadImageFromURL:(NSURL*)inURL {
    NSURLRequest *request = [NSURLRequest requestWithURL:inURL];
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];

    if (conn) {
        delta = [[NSMutableData data] retain];
    }    
}

- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data {
    [delta appendData:data];

    }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     
    NSURL *urlink=[NSURL URLWithString:[[objectsForImages objectForKey:[arrayOfCharacters objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]];
    [self loadImageFromURL:urlink];
    UIImage *imageForAz=[UIImage imageWithData:delta];
    cell.imageView.image=imageForAz; 

}

1 个答案:

答案 0 :(得分:5)

你对异步性感到困惑。如果loadImageFromURL:是同步的,例如包装sendSynchronousRequest:returningResponse:error:,您的代码将按预期工作; <{1}}会在提取时阻止,并在填充loadImageFromURL:时返回。

但是,这都是异步的,因此您实际需要做的是在代理中实现delta(在本例中为connectionDidFinishLoading:)并在其中设置self

相应地重写一些代码(我假设你为了这个例子而删除了cell.imageView.image中的无关代码):

tableView:cellForRowAtIndexPath:

查看URL Loading System Programming Guide on NSURLConnection了解更多详情/示例。