mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-03-29 00:48:02 +08:00
131 lines
5.0 KiB
Objective-C
131 lines
5.0 KiB
Objective-C
//
|
|
// RKTwitterViewController.m
|
|
// RKTwitter
|
|
//
|
|
// Created by Blake Watters on 9/5/10.
|
|
// Copyright (c) 2009-2012 RestKit. All rights reserved.
|
|
//
|
|
|
|
#import "RKTwitterViewController.h"
|
|
#import "RKTweet.h"
|
|
|
|
static void RKTwitterShowAlertWithError(NSError *error)
|
|
{
|
|
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
|
|
message:[error localizedDescription]
|
|
delegate:nil
|
|
cancelButtonTitle:@"OK" otherButtonTitles:nil];
|
|
[alert show];
|
|
}
|
|
|
|
@interface RKTwitterViewController () <UITableViewDelegate, UITableViewDataSource, NSFetchedResultsControllerDelegate>
|
|
@property (nonatomic, weak) IBOutlet UITableView *tableView;
|
|
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;
|
|
@end
|
|
|
|
@implementation RKTwitterViewController
|
|
|
|
- (void)viewDidLoad
|
|
{
|
|
[super viewDidLoad];
|
|
|
|
// Set debug logging level. Set to 'RKLogLevelTrace' to see JSON payload
|
|
RKLogConfigureByName("RestKit/Network", RKLogLevelDebug);
|
|
|
|
// Setup View and Table View
|
|
self.title = @"RestKit Tweets";
|
|
|
|
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Tweet"];
|
|
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO];
|
|
fetchRequest.sortDescriptors = @[descriptor];
|
|
NSError *error = nil;
|
|
|
|
// Setup fetched results
|
|
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
|
|
managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext
|
|
sectionNameKeyPath:nil
|
|
cacheName:nil];
|
|
[self.fetchedResultsController setDelegate:self];
|
|
BOOL fetchSuccessful = [self.fetchedResultsController performFetch:&error];
|
|
NSAssert([[self.fetchedResultsController fetchedObjects] count], @"Seeding didn't work...");
|
|
if (! fetchSuccessful) {
|
|
RKTwitterShowAlertWithError(error);
|
|
}
|
|
|
|
[self loadData];
|
|
}
|
|
|
|
|
|
- (void)loadData
|
|
{
|
|
// Load the object model via RestKit
|
|
[[RKObjectManager sharedManager] getObjectsAtPath:@"/status/user_timeline/RestKit" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
|
|
RKLogInfo(@"Load complete: Table should refresh...");
|
|
|
|
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"LastUpdatedAt"];
|
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
|
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
|
|
RKLogError(@"Load failed with error: %@", error);
|
|
|
|
RKTwitterShowAlertWithError(error);
|
|
}];
|
|
}
|
|
|
|
- (IBAction)refresh:(id)sender
|
|
{
|
|
// Load the object model via RestKit
|
|
[self loadData];
|
|
}
|
|
|
|
#pragma mark UITableViewDelegate methods
|
|
|
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
RKTweet *status = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
|
CGSize size = [[status text] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 9000)];
|
|
return size.height + 10;
|
|
}
|
|
|
|
#pragma mark UITableViewDataSource methods
|
|
|
|
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
|
|
{
|
|
id<NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController.sections objectAtIndex:section];
|
|
return [sectionInfo numberOfObjects];
|
|
}
|
|
|
|
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
|
{
|
|
NSDate *lastUpdatedAt = [[NSUserDefaults standardUserDefaults] objectForKey:@"LastUpdatedAt"];
|
|
NSString *dateString = [NSDateFormatter localizedStringFromDate:lastUpdatedAt dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterMediumStyle];
|
|
if (nil == dateString) {
|
|
dateString = @"Never";
|
|
}
|
|
return [NSString stringWithFormat:@"Last Load: %@", dateString];
|
|
}
|
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
NSString *reuseIdentifier = @"Tweet Cell";
|
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
|
|
if (nil == cell) {
|
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
|
|
cell.textLabel.font = [UIFont systemFontOfSize:14];
|
|
cell.textLabel.numberOfLines = 0;
|
|
cell.textLabel.backgroundColor = [UIColor clearColor];
|
|
cell.contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"listbg.png"]];
|
|
}
|
|
RKTweet *status = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
|
cell.textLabel.text = status.text;
|
|
return cell;
|
|
}
|
|
|
|
#pragma mark NSFetchedResultsControllerDelegate methods
|
|
|
|
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
|
|
{
|
|
[self.tableView reloadData];
|
|
}
|
|
|
|
@end
|