2013-01-23 38 views

回答

47
+0

修復alexedge的第一個鏈接:https://github.com/RestKit/RestKit/issues/832,然後從構建階段刪除腳本 –

+2

也看看這個網站http://restkit-tutorials.com –

+0

有截至2015年2月的一個全新的教程,使用CoreData的RestKit https://medium.com/ios-os-x-development/restkit-tutorial-how-to-fetch-data-from-an-api-into-core -data-9326af750e10 – ZviBar

4

我發現下面的代碼可以使用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

+0

很不錯的教程。謝謝。 – Rajesh

+0

很酷...非常有幫助..非常感謝。 – JAHelia