2013-04-24 50 views
0

我从json url写入plist数组。 我想,当不存在互联网的tableview从plist中获取数据,并在存在的tableView得到JSON的URL数据如何在没有互联网的情况下从tableView中读取数据

这是我的代码(我创建的文档文件夹中的应用plist文件):

#import "ViewController.h" 
#define DOC_DIR [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] 


@implementation ViewController 
{ 
    NSMutableArray *name; 
    NSMutableData *data; 
    NSString *listPath; 
    NSMutableArray *array; 
    NSArray *n; 
    NSMutableArray *add; 
} 
@synthesize table; 
-(NSString*)Dir 
{ 
    return [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 
} 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    NSURL *url = [NSURL URLWithString:@"http://myDomain.com/test.php"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [con start]; 


} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    data = [[NSMutableData alloc]init]; 
} 

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    name = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
    for (int i = 0; i < [name count]; i++) { 

    NSIndexPath *indexPath = [self.table indexPathForSelectedRow]; 
    n = [[name objectAtIndex:(indexPath.row)+i]objectForKey:@"title"]; 
    if(!add){ 
     add = [NSMutableArray array]; 
    } 
    [add addObject:n]; 
    } 
    NSLog(@"add = %@",add); 
    [table reloadData]; 
    [self WriteToPlist:add]; 
} 
- (void)WriteToPlist:(NSArray*)dataArray 
{ 
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:dataArray,@"Name", nil]; 
    NSString *Path = [DOC_DIR stringByAppendingPathComponent:@"Plist.plist"]; 
    [dic writeToFile:Path atomically:YES]; 
    NSLog(@"Path : %@",Path); 
} 

和验证码从JSON读取数据:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return [name count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    cell.textLabel.text = [[name objectAtIndex:indexPath.row] objectForKey:@"title"]; 
//top code read data from json and I want when no internet read data from plist 
    return cell; 
} 

回答

0
// Path to the plist (in the application bundle) 
NSString *path = [[NSBundle mainBundle] pathForResource: 
    @"Plist" ofType:@"plist"]; 

// Build the array from the plist 
NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path]; 

// Show the string values 
for (NSString *str in array2) 
    NSLog(@"--%@", str); 

你有数组现在只值设置为数据源阵列

[tableview reloadData]; 

为了检查互联网连接,你可以使用Reachability class provided by apple

+0

我的朋友如何的tableView显示,当没有互联网(如何在plist文件访问?) – john 2013-04-24 06:29:17

+0

为什么你需要互联网从plist文件访问内容?这是一个本地文件。您可以随时访问它。 – Anil 2013-04-24 06:37:12

+0

@john Tableview与连接无关,用于检查连接使用可用性类的可用性。编辑答案与链接 – 2013-04-24 06:39:53

0

第1步:检查互联网连接或者是不使用下面的方法,实现此方法

- (BOOL) connectedToInternet 
{ 
    NSURL *requestURL = [NSURL URLWithString:@"http://www.google.com"]; 
    NSData *data = [NSData dataWithContentsOfURL:requestURL]; 

    return ([data bytes]>0) ? YES : NO; 
} 

OR

步骤1:如果您知道的话,您也可以实施Reachability Class来检查Apple的互联网连接性。

第2步:现在请检查连接在你的方法Befor调用web服务请求

if([self connectedToInternet]) 
{ 
    // Make a reqeust to server 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    NSURL *url = [NSURL URLWithString:@"http://yourDomain.com/test.php"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [con start]; 
} 
else 
{ 
    // Write a Handy code to load Data from Your Local Plist 
    // Path to plist From Documents Folder 
    NSString *docFilePath = [DOC_DIR stringByAppendingPathComponent:@"Data.plist"]; 

    NSDictionary *dictData = [NSDictionary dictionaryWithContentsOfFile:docFilePath]; 


    NSLog(@"%@",dictData); 
    // Reload your TableView 
} 
+0

谢谢我的朋友你能帮助我,告诉我如何从文档文件夹中调用.plist文件并存储在NSDictionary中? – john 2013-04-24 07:24:27

+0

我编辑了我的代码,检查它 – 2013-04-24 07:28:19

相关问题