网站定位之—根据IP得到区域

行使UITableView显示从网络上下载的图片,因为网络图片下载相比较费用时间,一般接纳边突显文字,内容,后台下载图片,下载完结后刷新TableViewCell
,本文将演示咋样通过自定的UITableViewCell,显示图片。

记得在此之前做一个扶植机构网站时候要求稳定,那时候用的天涯论坛的api,不是很精准。

1。定义ImageTableViewCell 

demo:https://github.com/dunitian/LoTCodeBase/tree/master/NetCode/3.常用技术/06.Position/01.IPToPosition

@interface ImageTableViewCell : UITableViewCell {
    UILabel *txtLabel;
    UIImageView *imageView;
}
@property(nonatomic, retain)IBOutlet UILabel *txtLabel;
@property(nonatomic, retain)IBOutlet UIImageView *imageView;

新兴做电商的时候用的博客园的api,感觉还行,,,,,当时就想借使有本地ip库多爽啊?当时共享的ip库也就只有QQ纯真库了,里面东西比较杂

– (void)setCell:(UIImage *)image text:(NSString *)text;

明日看网易这几个新闻(http://news.cnblogs.com/n/530762/)的时候发现了个好东西==>**17monipdb**

@end 

她的网址是:

措施添加如下 

https://www.ipip.net/download.html

 – (void)setCell:(UIImage *)image text:(NSString *)text

他共享了一个dat文件,基本上能化解大家的题材了

{
    if (image != nil)
    {
        self.imageView.image = image;
    }
    
    self.txtLabel.text = text;

官方帮衬类(用ip.cs):https://github.com/17mon/csharp
and https://github.com/cobub/razor

}

新兴本人拉过来做了一个MVC的Demo:

 具体达成代码,请在源代码里查看

源码发一下:http://pan.baidu.com/s/1qWuxY3M OR 链接:
http://pan.baidu.com/s/1jGni72I 密码: iiy2

 

 

2。定义ImageDownloader
,那几个类继承NSOperation,因为需要出现,所以要求贯彻上面4个方法 

下边简单解析一下源码:

//是否同意出现,

实际文字看图

-(BOOL)isConcurrent 

 

– (BOOL)isExecuting

后台简单过滤并调用

//是否业已成功,这些必须求重载,不然放在放在NSOperationQueue里的NSOpertaion不可能健康释放。

图片 1

– (BOOL)isFinished

 

//具体下载的艺术在此间举行。

前台代码

– (void)start 

图片 2

 

 

而对应于非并发的情事下,只需求重载main方法就好了。

效果

 

图片 3

 

 最新版本下载:https://github.com/dunitian/LoTCodeBase/tree/master/NetCode/3.常用技术/06.Position/01.IPToPosition/App\_Data

#import <Foundation/Foundation.h>

@protocol imageDownloaderDelegate;

@interface ImageDownloader : NSOperation 
{
    NSURLRequest* _request;
    
    NSURLConnection* _connection;
    
    NSMutableData* _data;
    
    BOOL _isFinished; 
    
    id<imageDownloaderDelegate> delegate;
    
    NSObject *delPara;
}

– (id)initWithURLString:(NSString *)url;

@property (readonly) NSData *data;
@property(nonatomic, assign) id<imageDownloaderDelegate> delegate;
@property(nonatomic, retain) NSObject *delPara;

@end

@protocol imageDownloaderDelegate

@optional

//图片下载达成的寄托
– (void)imageDidFinished:(UIImage *)image para:(NSObject *)obj;

@end

 

 

 完成文件如下

 #import “ImageDownloader.h”

@implementation ImageDownloader

@synthesize data=_data;
@synthesize delegate;
@synthesize delPara;

– (void)dealloc 
{
    
    [_request release]; 
    _request=nil;
    
    [_data release];
    _data=nil;
    
    [_connection release];
    _connection=nil;
    
    [delPara release];
    
    [super dealloc];
    
}
– (id)initWithURLString:(NSString *)url 
{
    
    self = [self init];
    if (self) {

        _request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
        
        _data = [[NSMutableData data] retain];
        
    }
    
    return self;
    
}

// 开头拍卖-本类的主方法

– (void)start {
    
    if (![self isCancelled]) {
        
        [NSThread sleepForTimeInterval:3];
        // 以异步模式处理事件,并安装代理
        
        _connection=[[NSURLConnection connectionWithRequest:_request delegate:self]retain];
        
        while(_connection != nil) {
            
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];   
            
        }
        
    }
    
}

#pragma mark NSURLConnection delegate Method

// 接收到数码(增量)时

– (void)connection:(NSURLConnection*)connection

    didReceiveData:(NSData*)data 
{
    // 添加数据
    [_data appendData:data];
    
}

– (void)connectionDidFinishLoading:(NSURLConnection*)connection {
    
    [_connection release],
    _connection=nil;
    NSLog(@”%s”, __func__);
    
    UIImage *img = [[[UIImage alloc] initWithData:self.data] autorelease];
    
    if (self.delegate != nil)
    {
        [delegate imageDidFinished:img para:self.delPara];
    }
    
    
}

-(void)connection: (NSURLConnection *) connection didFailWithError: (NSError *) error
{
    [_connection release],
    _connection=nil; 
}

-(BOOL)isConcurrent 
{
    //重返yes表示帮衬异步调用,否则为永葆同步调用
    return YES;
    
}
– (BOOL)isExecuting
{
    return _connection == nil; 
}
– (BOOL)isFinished
{
    return _connection == nil;  
}

然后再UITableViewController里每个Cell创设的时候,即使没有图片的话,就透过ImageDownloader去下载,下载完了刷新那个Cell就足以了。

#import <UIKit/UIKit.h>
#import “ImageDownloader.h”
@interface RootViewController : UITableViewController <imageDownloaderDelegate>
{
    NSOperationQueue *queue;
    NSMutableArray *siteArray;
    NSMutableArray *imageArray;
    NSMutableDictionary *dic;
}
@property(nonatomic, retain)NSOperationQueue *queue;
@property(nonatomic, retain)NSMutableArray *siteArray;
@property(nonatomic, retain)NSMutableArray *imageArray;

@end

 

 达成公文

 

//
//  RootViewController.m
//  NSOperationTest
//
//

#import “RootViewController.h”
#import “ImageDownloader.h”
#import “ImageTableViewCell.h”

@implementation RootViewController
@synthesize queue;
@synthesize siteArray;
@synthesize imageArray;

– (void)dealloc
{
    [self.queue release];
    [self.siteArray release];
    [self.imageArray release];
    [super dealloc];
}

– (void)viewDidLoad
{
    [super viewDidLoad];
    self.queue = [[[NSOperationQueue alloc] init] autorelease];
    self.siteArray = [[[NSMutableArray alloc] init] autorelease];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972321636938600.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953930325377400.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953847613105000.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972570125915500.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131954190510086200.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972321636938600.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953930325377400.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953847613105000.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972570125915500.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131954190510086200.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972321636938600.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953930325377400.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953847613105000.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972570125915500.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131954190510086200.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972321636938600.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953930325377400.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953847613105000.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972570125915500.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131954190510086200.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972321636938600.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953930325377400.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953847613105000.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972570125915500.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131954190510086200.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972321636938600.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953930325377400.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131953847613105000.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/27/131972570125915500.jpg"\];
    [self.siteArray addObject:@”http://s1.lashouimg.com/zt/201110/25/131954190510086200.jpg"\];
    
    self.imageArray = [[[NSMutableArray alloc] init] autorelease];
    for ( int i = 0; i  < [self.siteArray count]; i++) 
    {
        [self.imageArray addObject: [NSNull null]];
    }
    dic = [NSDictionary dictionary];
    
}

// Customize the number of sections in the table view.
– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [siteArray count];
}

// Customize the appearance of table view cells.
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @”Cell”;
    
    ImageTableViewCell *cell = (ImageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@”ImageTableViewCell” owner:self options:nil];
        cell = (ImageTableViewCell *)[bundle objectAtIndex:0];
    }

    NSString *text = [NSString stringWithFormat:@”%d”, indexPath.row];

    
    NSNull *null = (NSNull *)[self.imageArray objectAtIndex:indexPath.row];
    
    if (![null isKindOfClass:[NSNull class]])
    {
        [cell setCell:[imageArray objectAtIndex:indexPath.row] text:text];
  
    }
    else
    {
        [cell setCell:nil text:text];
        NSString *url = [self.siteArray objectAtIndex:indexPath.row];
        ImageDownloader *downloader = [[[ImageDownloader alloc] initWithURLString:url] autorelease];
        downloader.delegate = self;
        downloader.delPara = indexPath;
        [self.queue addOperation:downloader];
    }

    // Configure the cell.
    return cell;
}

– (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 112;
}

– (void)imageDidFinished:(UIImage *)image para:(NSObject *)obj
{
    
    NSIndexPath *indexPath = (NSIndexPath *)obj;
    [self.imageArray replaceObjectAtIndex:indexPath.row withObject:image];
    ImageTableViewCell *cell = (ImageTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
    NSString *text = [NSString stringWithFormat:@”%d”, indexPath.row];
    [cell setCell:image text:text];
    [cell setNeedsDisplay];

    
}

@end 

 

本文是通过委托完毕的基础代谢Cell,你也得以经过一个Observer,观望图片是否下载完结,完成后就刷新图片所再Cell。通过Observer如何达成请参考这一个网址http://blog.csdn.net/kmyhy/article/details/6050345 

 

正文地址:http://www.cnblogs.com/likwo/archive/2011/10/30/2229582.html

 

demo项目下载