¿Hay algún Tutorial Restkit 2.0 como raywenderlich?
(3)
¡Hice una pregunta similar y logré resolverlo justo cuando alguien me dio la respuesta! ¡Típico!
Un vistazo rápido aquí Restkit 0.20 funcionamiento básico
estoy aprendiendo restiit api. Encontré un muy buen tutorial de Raywenderlich restkit. Pero está integrado con Restkit 0.10.1. Y quiero aprender un RestKit-0.20.0-pre6. Si alguien tiene un buen tutorial como este en iOS. Por favor comparte. Gracias por adelantado.
Encontré el siguiente código para trabajar con RestKit 0.20.
El otro código que se encuentra en el tutorial de RayWenderlich para Location.m, Location.m, Venue.m y Venue.h aún debe estar bien.
//
// MasterViewController.m
// CoffeeShop
//
//
// Copyright (c) 2013 uihelpers. All rights reserved.
//
#import "MasterViewController.h"
#import <RestKit/RestKit.h>
#import "Venue.h"
#import "Location.h"
#define kCLIENTID "REPLACE_WITH_OWN_ID"
#define kCLIENTSECRET "REPLACE_WITH_OWN_SECRET"
@interface MasterViewController () {
NSMutableArray *_objects;
NSArray *cafeArray;
}
@end
@implementation MasterViewController
- (void)awakeFromNib
{
[super awakeFromNib];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
NSURL *baseURL = [NSURL URLWithString:@"https://api.foursquare.com/v2"];
AFHTTPClient * client = [AFHTTPClient clientWithBaseURL:baseURL];
[client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[Venue class]];
[venueMapping addAttributeMappingsFromDictionary:@{
@"name" : @"name"
}];
RKObjectMapping *locationMapping = [RKObjectMapping mappingForClass:[Location class]];
[locationMapping addAttributeMappingsFromDictionary:@{ @"address": @"address", @"city": @"city", @"country": @"country", @"crossStreet": @"crossStreet", @"postalCode": @"postalCode", @"state": @"state", @"distance": @"distance", @"lat": @"lat", @"lng": @"lng"}];
/*[venueMapping mapRelationship:@"location" withMapping:locationMapping];
[objectManager.mappingProvider setMapping:locationMapping forKeyPath:@"location"];*/
[venueMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"location" toKeyPath:@"location" withMapping:locationMapping]];
RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:venueMapping
pathPattern:nil
keyPath:@"response.venues"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:responseDescriptor];
NSString *latLon = @"37.33,-122.03";
NSString *clientID = [NSString stringWithUTF8String:kCLIENTID];
NSString *clientSecret = [NSString stringWithUTF8String:kCLIENTSECRET];
NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys:latLon, @"ll", clientID, @"client_id", clientSecret, @"client_secret", @"coffee", @"query", @"20120602", @"v", nil];
[objectManager getObjectsAtPath:@"https://api.foursquare.com/v2/venues/search"
parameters:queryParams
success:^(RKObjectRequestOperation * operaton, RKMappingResult *mappingResult)
{
//NSLog(@"success: mappings: %@", mappingResult);
NSArray *result = [mappingResult array];
cafeArray = [mappingResult array];
for (Venue *item in result) {
NSLog(@"name=%@",item.name);
NSLog(@"name=%@",item.location.distance);
}
[self.tableView reloadData];
}
failure:^(RKObjectRequestOperation * operaton, NSError * error)
{
NSLog (@"failure: operation: %@ /n/nerror: %@", operaton, error);
}];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (void)insertNewObject:(id)sender
{
if (!_objects) {
_objects = [[NSMutableArray alloc] init];
}
[_objects insertObject:[NSDate date] atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return cafeArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
/*NSDate *object = [_objects objectAtIndex:indexPath.row];
cell.textLabel.text = [object description];*/
Venue *venueObject = [cafeArray objectAtIndex: indexPath.row];
cell.textLabel.text = [venueObject.name length] > 24 ? [venueObject.name substringToIndex:24] : venueObject.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.0fm", [venueObject.location.distance floatValue]];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[_objects removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/
/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
@end
Este tutorial también podría ayudar:
http://madeveloper.blogspot.com/2013/01/ios-restkit-tutorial-code-for-version.html
Finalmente, Raywenderlich ha actualizado el tutorial para el nuevo RestKit http://www.raywenderlich.com/58682/introduction-restkit-tutorial
RestKit 0.20 http://blog.alexedge.co.uk/introduction-to-restkit-0-20/
Reskit 0.20 tutorial https://github.com/RestKit/RKGist/blob/master/TUTORIAL.md
Desarrollando aplicaciones iOS RESTful con RestKit por Blake Watters http://code.tutsplus.com/tutorials/restkit_ios-sdk--mobile-4524 http://code.tutsplus.com/tutorials/advanced-restkit-development_iphone-sdk--mobile-5916
http://madeveloper.blogspot.com/2013/01/ios-restkit-tutorial-code-for-version.html
Finalmente, siempre siga :) https://github.com/RestKit/RestKit/wiki
NSScreen es un servicio de pago, pero sus códigos son gratuitos: https://github.com/subdigital/nsscreencast
Tutoriales NSScreencast -
http://nsscreencast.com/episodes/53-restkit-object-manager
http://nsscreencast.com/episodes/52-restkit-coredata
http://nsscreencast.com/episodes/51-intro-to-restkit-mapping