我正在学习restkit api。我找到了一个非常好的Raywenderlich restkit 教程。但它与 Restkit 0.10.1 集成。我想学习一个 RestKit-0.20.0-pre6。如果有人在iOS中有这样的好教程。请分享。提前致谢。
3 回答
最后,Raywenderlich 更新了新 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 教程 https://github.com/RestKit/RKGist/blob/master/TUTORIAL.md
Blake Watters 使用 RestKit 开发 RESTful iOS 应用程序 http://code.tutsplus.com/tutorials/restkit_ios-sdk--mobile-4524 http://code.tutsplus.com/tutorials/advanced-restkit-development_iphone-sdk--手机5916
http://madeveloper.blogspot.com/2013/01/ios-restkit-tutorial-code-for-version.html
最后总是关注 :) https://github.com/RestKit/RestKit/wiki
NSScreen 是一项付费服务,但其代码是免费的 - https://github.com/subdigital/nsscreencast
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
我发现下面的代码可以与 RestKit 0.20 一起使用。
在 RayWenderlich 的 Location.m、Location.m、Venue.m 和 Venue.h 教程中找到的其他代码应该仍然可以。
//
// 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
本教程也可能会有所帮助:
http://madeveloper.blogspot.com/2013/01/ios-restkit-tutorial-code-for-version.html
我问了一个类似的问题并设法解决了,就像有人给了我答案一样!典型的!
快速浏览这里Restkit 0.20 基本操作