0

json url から plist に配列を書き込みます。インターネットテーブルビューが存在しない場合はplistからデータを取得し、テーブルビューが存在する場合はjson URLからデータを取得します

これは私のコードです(ドキュメントフォルダーアプリケーションで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;
}
4

2 に答える 2