Commit d363bc32 authored by Eloy Duran's avatar Eloy Duran

Update RKTwitter example. ALL EXAMPLES BUILD!

parent cdcbb414
...@@ -3,19 +3,19 @@ ...@@ -3,19 +3,19 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright 2010 Two Toasters. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import "RKTUser.h" #import "RKTUser.h"
@interface RKTStatus : NSObject { @interface RKTStatus : NSObject {
NSNumber* _statusID; NSNumber* _statusID;
NSDate* _createdAt; NSDate* _createdAt;
NSString* _text; NSString* _text;
NSString* _urlString; NSString* _urlString;
NSString* _inReplyToScreenName; NSString* _inReplyToScreenName;
NSNumber* _isFavorited; NSNumber* _isFavorited;
RKTUser* _user; RKTUser* _user;
} }
/** /**
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright 2010 Two Toasters. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import "RKTStatus.h" #import "RKTStatus.h"
...@@ -15,21 +15,21 @@ ...@@ -15,21 +15,21 @@
@synthesize text = _text; @synthesize text = _text;
@synthesize urlString = _urlString; @synthesize urlString = _urlString;
@synthesize inReplyToScreenName = _inReplyToScreenName; @synthesize inReplyToScreenName = _inReplyToScreenName;
@synthesize isFavorited = _isFavorited; @synthesize isFavorited = _isFavorited;
@synthesize user = _user; @synthesize user = _user;
- (NSString*)description { - (NSString*)description {
return [NSString stringWithFormat:@"%@ (ID: %@)", self.text, self.statusID]; return [NSString stringWithFormat:@"%@ (ID: %@)", self.text, self.statusID];
} }
- (void)dealloc { - (void)dealloc {
[_statusID release]; [_statusID release];
[_createdAt release]; [_createdAt release];
[_text release]; [_text release];
[_urlString release]; [_urlString release];
[_inReplyToScreenName release]; [_inReplyToScreenName release];
[_user release]; [_user release];
[super dealloc]; [super dealloc];
} }
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright 2010 Two Toasters. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
@interface RKTUser : NSObject { @interface RKTUser : NSObject {
NSNumber* _userID; NSNumber* _userID;
NSString* _name; NSString* _name;
NSString* _screenName; NSString* _screenName;
} }
@property (nonatomic, retain) NSNumber* userID; @property (nonatomic, retain) NSNumber* userID;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright 2010 Two Toasters. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import "RKTUser.h" #import "RKTUser.h"
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
- (void)dealloc { - (void)dealloc {
[_userID release]; [_userID release];
[_name release]; [_name release];
[_screenName release]; [_screenName release];
[super dealloc]; [super dealloc];
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright Two Toasters 2010. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright Two Toasters 2010. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import <RestKit/RestKit.h> #import <RestKit/RestKit.h>
...@@ -19,47 +19,48 @@ ...@@ -19,47 +19,48 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
RKLogConfigureByName("RestKit/Network*", RKLogLevelTrace); RKLogConfigureByName("RestKit/Network*", RKLogLevelTrace);
RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);
// Initialize RestKit // Initialize RestKit
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://twitter.com"]; RKObjectManager* objectManager = [RKObjectManager managerWithBaseURLString:@"http://twitter.com"];
// Enable automatic network activity indicator management // Enable automatic network activity indicator management
//objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
// Setup our object mappings // Setup our object mappings
RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[RKTUser class]]; RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[RKTUser class]];
[userMapping mapKeyPath:@"id" toAttribute:@"userID"]; [userMapping mapKeyPath:@"id" toAttribute:@"userID"];
[userMapping mapKeyPath:@"screen_name" toAttribute:@"screenName"]; [userMapping mapKeyPath:@"screen_name" toAttribute:@"screenName"];
[userMapping mapAttributes:@"name", nil]; [userMapping mapAttributes:@"name", nil];
RKObjectMapping* statusMapping = [RKObjectMapping mappingForClass:[RKTStatus class]]; RKObjectMapping* statusMapping = [RKObjectMapping mappingForClass:[RKTStatus class]];
[statusMapping mapKeyPathsToAttributes:@"id", @"statusID", [statusMapping mapKeyPathsToAttributes:@"id", @"statusID",
@"created_at", @"createdAt", @"created_at", @"createdAt",
@"text", @"text", @"text", @"text",
@"url", @"urlString", @"url", @"urlString",
@"in_reply_to_screen_name", @"inReplyToScreenName", @"in_reply_to_screen_name", @"inReplyToScreenName",
@"favorited", @"isFavorited", @"favorited", @"isFavorited",
nil]; nil];
[statusMapping mapRelationship:@"user" withMapping:userMapping]; [statusMapping mapRelationship:@"user" withMapping:userMapping];
// Update date format so that we can parse Twitter dates properly // Update date format so that we can parse Twitter dates properly
// Wed Sep 29 15:31:08 +0000 2010 // Wed Sep 29 15:31:08 +0000 2010
[statusMapping.dateFormatStrings addObject:@"E MMM d HH:mm:ss Z y"]; [RKObjectMapping addDefaultDateFormatterForString:@"E MMM d HH:mm:ss Z y" inTimeZone:nil];
// Register our mappings with the provider // Uncomment these lines to use XML, comment it to use JSON
[objectManager.mappingProvider setMapping:userMapping forKeyPath:@"user"]; // objectManager.acceptMIMEType = RKMIMETypeXML;
[objectManager.mappingProvider setMapping:statusMapping forKeyPath:@"status"]; // statusMapping.rootKeyPath = @"statuses.status";
// Uncomment this to use XML, comment it to use JSON // Register our mappings with the provider using a resource path pattern
// objectManager.acceptMIMEType = RKMIMETypeXML; [objectManager.mappingProvider setObjectMapping:statusMapping forResourcePathPattern:@"/status/user_timeline/:username"];
// [objectManager.mappingProvider setMapping:statusMapping forKeyPath:@"statuses.status"];
// Create Window and View Controllers // Create Window and View Controllers
RKTwitterViewController* viewController = [[[RKTwitterViewController alloc] initWithNibName:nil bundle:nil] autorelease]; RKTwitterViewController* viewController = [[[RKTwitterViewController alloc] initWithNibName:nil bundle:nil] autorelease];
UINavigationController* controller = [[UINavigationController alloc] initWithRootViewController:viewController]; UINavigationController* controller = [[UINavigationController alloc] initWithRootViewController:viewController];
UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[window addSubview:controller.view]; [window addSubview:controller.view];
[window makeKeyAndVisible]; [window makeKeyAndVisible];
return YES; return YES;
} }
......
...@@ -3,15 +3,15 @@ ...@@ -3,15 +3,15 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright Two Toasters 2010. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import <RestKit/RestKit.h> #import <RestKit/RestKit.h>
@interface RKTwitterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, RKObjectLoaderDelegate> { @interface RKTwitterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, RKObjectLoaderDelegate> {
UITableView* _tableView; UITableView* _tableView;
NSArray* _statuses; NSArray* _statuses;
} }
@end @end
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright Two Toasters 2010. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import "RKTwitterViewController.h" #import "RKTwitterViewController.h"
...@@ -16,45 +16,39 @@ ...@@ -16,45 +16,39 @@
@implementation RKTwitterViewController @implementation RKTwitterViewController
- (void)loadTimeline { - (void)loadTimeline {
// Load the object model via RestKit // Load the object model via RestKit
RKObjectManager* objectManager = [RKObjectManager sharedManager]; RKObjectManager* objectManager = [RKObjectManager sharedManager];
objectManager.client.baseURL = @"http://www.twitter.com"; objectManager.client.baseURL = [RKURL URLWithString:@"http://www.twitter.com"];
[objectManager loadObjectsAtResourcePath:@"/status/user_timeline/RestKit" delegate:self block:^(RKObjectLoader* loader) { [objectManager loadObjectsAtResourcePath:@"/status/user_timeline/RestKit" delegate:self];
// Twitter returns statuses as a naked array in JSON, so we instruct the loader
// to user the appropriate object mapping
if ([objectManager.acceptMIMEType isEqualToString:RKMIMETypeJSON]) {
loader.objectMapping = [objectManager.mappingProvider objectMappingForClass:[RKTStatus class]];
}
}];
} }
- (void)loadView { - (void)loadView {
[super loadView]; [super loadView];
// Setup View and Table View // Setup View and Table View
self.title = @"RestKit Tweets"; self.title = @"RestKit Tweets";
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent; [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
self.navigationController.navigationBar.tintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor blackColor];
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(loadTimeline)] autorelease]; self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(loadTimeline)] autorelease];
UIImageView* imageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"BG.png"]] autorelease]; UIImageView* imageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"BG.png"]] autorelease];
imageView.frame = CGRectOffset(imageView.frame, 0, -64); imageView.frame = CGRectOffset(imageView.frame, 0, -64);
[self.view insertSubview:imageView atIndex:0]; [self.view insertSubview:imageView atIndex:0];
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-64) style:UITableViewStylePlain]; _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-64) style:UITableViewStylePlain];
_tableView.dataSource = self; _tableView.dataSource = self;
_tableView.delegate = self; _tableView.delegate = self;
_tableView.backgroundColor = [UIColor clearColor]; _tableView.backgroundColor = [UIColor clearColor];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:_tableView]; [self.view addSubview:_tableView];
[self loadTimeline]; [self loadTimeline];
} }
- (void)dealloc { - (void)dealloc {
[_tableView release]; [_tableView release];
[_statuses release]; [_statuses release];
[super dealloc]; [super dealloc];
} }
...@@ -65,43 +59,43 @@ ...@@ -65,43 +59,43 @@
} }
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { - (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
NSLog(@"Loaded statuses: %@", objects); NSLog(@"Loaded statuses: %@", objects);
[_statuses release]; [_statuses release];
_statuses = [objects retain]; _statuses = [objects retain];
[_tableView reloadData]; [_tableView reloadData];
} }
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { - (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
UIAlertView* alert = [[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease]; UIAlertView* alert = [[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
[alert show]; [alert show];
NSLog(@"Hit error: %@", error); NSLog(@"Hit error: %@", error);
} }
#pragma mark UITableViewDelegate methods #pragma mark UITableViewDelegate methods
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGSize size = [[[_statuses objectAtIndex:indexPath.row] text] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 9000)]; CGSize size = [[[_statuses objectAtIndex:indexPath.row] text] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 9000)];
return size.height + 10; return size.height + 10;
} }
#pragma mark UITableViewDataSource methods #pragma mark UITableViewDataSource methods
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section { - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
return [_statuses count]; return [_statuses count];
} }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString* reuseIdentifier = @"Tweet Cell"; NSString* reuseIdentifier = @"Tweet Cell";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (nil == cell) { if (nil == cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease]; cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];
cell.textLabel.font = [UIFont systemFontOfSize:14]; cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.textLabel.numberOfLines = 0; cell.textLabel.numberOfLines = 0;
cell.textLabel.backgroundColor = [UIColor clearColor]; cell.textLabel.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"listbg.png"]]; cell.contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"listbg.png"]];
} }
cell.textLabel.text = [[_statuses objectAtIndex:indexPath.row] text]; cell.textLabel.text = [[_statuses objectAtIndex:indexPath.row] text];
return cell; return cell;
} }
@end @end
This diff is collapsed.
PODS: PODS:
- JSONKit (1.4) - FileMD5Hash (0.0.1)
- ISO8601DateFormatter (0.6)
- JSONKit (1.5pre)
- LibComponentLogging-Core (1.1.6) - LibComponentLogging-Core (1.1.6)
- LibComponentLogging-NSLog (1.0.4): - LibComponentLogging-NSLog (1.0.4):
- LibComponentLogging-Core (>= 1.1.6) - LibComponentLogging-Core (>= 1.1.6)
- RestKit/ObjectMapping/JSONKit (0.9.3): - NSData+Base64 (1.0.0)
- JSONKit - RestKit (0.10.0):
- RestKit (= 0.9.3) - RestKit/JSON (= 0.10.0)
- RestKit/ObjectMapping (= 0.9.3) - RestKit/JSON (0.10.0):
- RestKit/Network
DOWNLOAD_ONLY: - RestKit/ObjectMapping/CoreData
- RestKit (0.9.3) - RestKit/ObjectMapping/JSON
- RestKit/Network (0.9.3) - RestKit/UI
- RestKit/ObjectMapping (0.9.3) - RestKit/Network (0.10.0):
- FileMD5Hash
- LibComponentLogging-NSLog (>= 1.0.4)
- SOCKit
- cocoa-oauth
- RestKit/ObjectMapping/CoreData (0.10.0):
- ISO8601DateFormatter (>= 0.6)
- RestKit/Network
- RestKit/ObjectMapping/JSON (0.10.0):
- ISO8601DateFormatter (>= 0.6)
- JSONKit (>= 1.5pre)
- RestKit/Network
- RestKit/UI (0.10.0):
- UDTableView
- SOCKit (1.0)
- UDTableView (1.0.0)
- cocoa-oauth (0.0.1):
- NSData+Base64 (~> 1.0)
DEPENDENCIES: DEPENDENCIES:
- RestKit/ObjectMapping/JSONKit - RestKit
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "RKTwitter.app"
BlueprintName = "RKTwitter"
ReferencedContainer = "container:RKTwitter.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "RKTwitter.app"
BlueprintName = "RKTwitter"
ReferencedContainer = "container:RKTwitter.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "RKTwitter.app"
BlueprintName = "RKTwitter"
ReferencedContainer = "container:RKTwitter.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "RKTwitter.app"
BlueprintName = "RKTwitter"
ReferencedContainer = "container:RKTwitter.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
// RKTwitter // RKTwitter
// //
// Created by Blake Watters on 9/5/10. // Created by Blake Watters on 9/5/10.
// Copyright Two Toasters 2010. All rights reserved. // Copyright (c) 2009-2012 RestKit. All rights reserved.
// //
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"RKTwitterAppDelegate"); int retVal = UIApplicationMain(argc, argv, nil, @"RKTwitterAppDelegate");
[pool release]; [pool release];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment