Я работаю над приложением IOS, написанным в Objective-C, и я почти сделали, за исключением одной вещи:Синтаксического JSON и сохранить локально
Я разбор JSON в Tableview, и я хочу для хранения данных локально в приложении. Но я не знаю, как это сделать. Каждая строка имеет изображение, заголовок, описание и ссылку. У меня разные вкладки с разными JSON.
(Я не хочу разбирать JSON каждый раз, когда приложение открывается, я хочу проверить, добавлено ли что-то новое в JSON, и THEN снова разобрать его. Но пока я просто счастлив, если я может удалять данные из JSON локально)
Я боролся с этим какое-то время, и мне действительно нужна помощь. Это последнее, что мне нужно исправить, прежде чем приложение будет готово для App Store.
Не знаю, нужно ли вам видеть какой-либо код, но я все равно отправляю его, чтобы вы могли лучше понять, что я делаю.
код для разбора JSON:
jsonData_ = [[NSMutableData alloc] init];
NSString *urlString = [NSString stringWithFormat:@"http://www.myUrl.se/json/%@.json", _whatState];
NSURL *url = [NSURL URLWithString: urlString];
NSURLRequest *urlReq = [NSURLRequest requestWithURL: url];
NSURLConnection *connection = [NSURLConnection connectionWithRequest: urlReq delegate:self];
-(void)connectionDidFinishLoading:(NSURLConnection*) connection{
//NSLog(@"Succeeded! Recieved %d bytes of data", [jsonData_ length]);
NSError *error;
NSArray *items = [NSJSONSerialization JSONObjectWithData: jsonData_ options: kNilOptions error: &error];
NSSortDescriptor *sortDesc = [[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]copy];
NSMutableArray *sortedItems = [NSMutableArray arrayWithObject: sortDesc];
sortedItems = [[items sortedArrayUsingDescriptors: sortedItems] copy];
if(!error)
{
tableData_ = sortedItems;
tableImgs_ = [[NSMutableArray alloc] initWithArray: tableData_ copyItems: YES];
[self.tableView reloadData];
jsonIsFinishedLoading = TRUE;
}
else
{
NSLog(@"ERROR");
}
}
Код для моего Tableview:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"listItem";
TSCustomCell *cell = (TSCustomCell*) [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
[cell setSelectedBackgroundView:selectedCellBgColorView];
if(jsonIsFinishedLoading)
{
NSDictionary *row = [tableData_ objectAtIndex: indexPath.row];
NSString *title = [row objectForKey:@"title"];
cell.url = [row objectForKey:@"url"];
UIFont *defaultFont = [UIFont fontWithName:@"Edmondsans-Bold" size:12.0];
[cell.listItemLbl setText: title];
[cell.listItemLbl setFont:defaultFont];
if([[tableImgs_ objectAtIndex:indexPath.row] isMemberOfClass: [UIImage class]])
{
[cell.listItemImage setImage: [tableImgs_ objectAtIndex: indexPath.row]];
}
else
{
UIActivityIndicatorView *loadingSymbol = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleGray];
loadingSymbol.frame = cell.listItemImage.frame;
[cell addSubview: loadingSymbol];
[loadingSymbol startAnimating];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
NSString *url = [row objectForKey: @"image"];
if([url isEqualToString: @""])
{
url = @"http://www.myUrl.se/images/standard.png";
}
else
{
url = [row objectForKey: @"image"];
}
NSURL *imgUrl = [NSURL URLWithString: url];
NSData *imageData = [NSData dataWithContentsOfURL: imgUrl];
UIImage *image = [UIImage imageWithData: imageData];
if(image != nil)
{
[tableImgs_ replaceObjectAtIndex:indexPath.row withObject:image];
NSLog(@"tableImgs != nil");
}
else
{
NSLog(@"tableImgs = nil");
[cell.listItemImage setImage: [UIImage imageNamed:@"standard_transp.png"]];
}
dispatch_sync(dispatch_get_main_queue(), ^{
[loadingSymbol removeFromSuperview];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationNone];
});
}); //end dispatch_async
}
}
}
return cell;
}
Спасибо !!
Будет ли AFNetworking помогать мне с моей проблемой для хранения данных локально? – Jojo
Да, определенно !!. просто просмотрите статью –