Twitter shut off its unauthorized access to the public timeline; switching example over to the App.net global stream.

This commit is contained in:
Mattt Thompson 2012-10-10 20:08:34 -07:00
parent ddf43e1122
commit 424c026f0c
15 changed files with 286 additions and 301 deletions

View file

@ -8,8 +8,8 @@
/* Begin PBXBuildFile section */
F8129C001591061B009BFE23 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8129BFF1591061B009BFE23 /* Cocoa.framework */; };
F8129C321591073C009BFE23 /* AFTwitterAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C251591073C009BFE23 /* AFTwitterAPIClient.m */; };
F8129C341591073C009BFE23 /* Tweet.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C2B1591073C009BFE23 /* Tweet.m */; };
F8129C321591073C009BFE23 /* AFAppDotNetAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C251591073C009BFE23 /* AFAppDotNetAPIClient.m */; };
F8129C341591073C009BFE23 /* Post.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C2B1591073C009BFE23 /* Post.m */; };
F8129C351591073C009BFE23 /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C2D1591073C009BFE23 /* User.m */; };
F8129C6F15910B15009BFE23 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C6E15910B15009BFE23 /* main.m */; };
F8129C7115910B3E009BFE23 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8129C7015910B3E009BFE23 /* MainMenu.xib */; };
@ -31,12 +31,12 @@
F8129C021591061B009BFE23 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
F8129C031591061B009BFE23 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
F8129C041591061B009BFE23 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
F8129C251591073C009BFE23 /* AFTwitterAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFTwitterAPIClient.m; path = Classes/AFTwitterAPIClient.m; sourceTree = SOURCE_ROOT; };
F8129C2A1591073C009BFE23 /* Tweet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tweet.h; sourceTree = "<group>"; };
F8129C2B1591073C009BFE23 /* Tweet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tweet.m; sourceTree = "<group>"; };
F8129C251591073C009BFE23 /* AFAppDotNetAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFAppDotNetAPIClient.m; path = Classes/AFAppDotNetAPIClient.m; sourceTree = SOURCE_ROOT; };
F8129C2A1591073C009BFE23 /* Post.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Post.h; sourceTree = "<group>"; };
F8129C2B1591073C009BFE23 /* Post.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Post.m; sourceTree = "<group>"; };
F8129C2C1591073C009BFE23 /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = "<group>"; };
F8129C2D1591073C009BFE23 /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = "<group>"; };
F8129C311591073C009BFE23 /* AFTwitterAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFTwitterAPIClient.h; path = Classes/AFTwitterAPIClient.h; sourceTree = SOURCE_ROOT; };
F8129C311591073C009BFE23 /* AFAppDotNetAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFAppDotNetAPIClient.h; path = Classes/AFAppDotNetAPIClient.h; sourceTree = SOURCE_ROOT; };
F8129C6E15910B15009BFE23 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
F8129C7015910B3E009BFE23 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = SOURCE_ROOT; };
F8129C7515910C40009BFE23 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
@ -118,8 +118,8 @@
F8129C051591061B009BFE23 /* Classes */ = {
isa = PBXGroup;
children = (
F8129C311591073C009BFE23 /* AFTwitterAPIClient.h */,
F8129C251591073C009BFE23 /* AFTwitterAPIClient.m */,
F8129C311591073C009BFE23 /* AFAppDotNetAPIClient.h */,
F8129C251591073C009BFE23 /* AFAppDotNetAPIClient.m */,
F8129C7615910C40009BFE23 /* AppDelegate.h */,
F8129C7515910C40009BFE23 /* AppDelegate.m */,
F8129C291591073C009BFE23 /* Models */,
@ -141,8 +141,8 @@
F8129C291591073C009BFE23 /* Models */ = {
isa = PBXGroup;
children = (
F8129C2A1591073C009BFE23 /* Tweet.h */,
F8129C2B1591073C009BFE23 /* Tweet.m */,
F8129C2A1591073C009BFE23 /* Post.h */,
F8129C2B1591073C009BFE23 /* Post.m */,
F8129C2C1591073C009BFE23 /* User.h */,
F8129C2D1591073C009BFE23 /* User.m */,
);
@ -241,9 +241,9 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F8129C341591073C009BFE23 /* Tweet.m in Sources */,
F8129C341591073C009BFE23 /* Post.m in Sources */,
F8129C351591073C009BFE23 /* User.m in Sources */,
F8129C321591073C009BFE23 /* AFTwitterAPIClient.m in Sources */,
F8129C321591073C009BFE23 /* AFAppDotNetAPIClient.m in Sources */,
F8129C6F15910B15009BFE23 /* main.m in Sources */,
F8129C7715910C40009BFE23 /* AppDelegate.m in Sources */,
F82EB07C159A172000B10B56 /* AFHTTPClient.m in Sources */,

View file

@ -20,10 +20,10 @@
F8E469DF13957DD500DB05C8 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469DE13957DD500DB05C8 /* CoreLocation.framework */; };
F8F6E8DC1463424800AD016F /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = F8F6E8D81463424800AD016F /* Icon.png */; };
F8F6E8DD1463424800AD016F /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8F6E8D91463424800AD016F /* Icon@2x.png */; };
F8FA9491150EF8C100ED4EAD /* AFTwitterAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9490150EF8C100ED4EAD /* AFTwitterAPIClient.m */; };
F8FA9494150EF97E00ED4EAD /* Tweet.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9493150EF97E00ED4EAD /* Tweet.m */; };
F8FA9491150EF8C100ED4EAD /* AFAppDotNetAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9490150EF8C100ED4EAD /* AFAppDotNetAPIClient.m */; };
F8FA9494150EF97E00ED4EAD /* Post.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9493150EF97E00ED4EAD /* Post.m */; };
F8FA9497150EF98800ED4EAD /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9496150EF98800ED4EAD /* User.m */; };
F8FA949A150EF9DA00ED4EAD /* PublicTimelineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9499150EF9DA00ED4EAD /* PublicTimelineViewController.m */; };
F8FA949A150EF9DA00ED4EAD /* GlobalTimelineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9499150EF9DA00ED4EAD /* GlobalTimelineViewController.m */; };
F8FA94B1150EFEC100ED4EAD /* AFHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA949D150EFEC100ED4EAD /* AFHTTPClient.m */; };
F8FA94B2150EFEC100ED4EAD /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA949F150EFEC100ED4EAD /* AFHTTPRequestOperation.m */; };
F8FA94B3150EFEC100ED4EAD /* AFImageRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94A1150EFEC100ED4EAD /* AFImageRequestOperation.m */; };
@ -33,7 +33,7 @@
F8FA94B8150EFEC100ED4EAD /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94AC150EFEC100ED4EAD /* AFURLConnectionOperation.m */; };
F8FA94B9150EFEC100ED4EAD /* AFXMLRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94AE150EFEC100ED4EAD /* AFXMLRequestOperation.m */; };
F8FA94BA150EFEC100ED4EAD /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94B0150EFEC100ED4EAD /* UIImageView+AFNetworking.m */; };
F8FA94C1150F019100ED4EAD /* TweetTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94C0150F019100ED4EAD /* TweetTableViewCell.m */; };
F8FA94C1150F019100ED4EAD /* PostTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94C0150F019100ED4EAD /* PostTableViewCell.m */; };
F8FA94D0150F094D00ED4EAD /* profile-image-placeholder.png in Resources */ = {isa = PBXBuildFile; fileRef = F8FA94CC150F094D00ED4EAD /* profile-image-placeholder.png */; };
F8FA94D1150F094D00ED4EAD /* profile-image-placeholder@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8FA94CD150F094D00ED4EAD /* profile-image-placeholder@2x.png */; };
/* End PBXBuildFile section */
@ -57,14 +57,14 @@
F8E469E213957DF700DB05C8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
F8F6E8D81463424800AD016F /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = SOURCE_ROOT; };
F8F6E8D91463424800AD016F /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = SOURCE_ROOT; };
F8FA948F150EF8C100ED4EAD /* AFTwitterAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFTwitterAPIClient.h; path = Classes/AFTwitterAPIClient.h; sourceTree = "<group>"; };
F8FA9490150EF8C100ED4EAD /* AFTwitterAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFTwitterAPIClient.m; path = Classes/AFTwitterAPIClient.m; sourceTree = "<group>"; };
F8FA9492150EF97E00ED4EAD /* Tweet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tweet.h; sourceTree = "<group>"; };
F8FA9493150EF97E00ED4EAD /* Tweet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tweet.m; sourceTree = "<group>"; };
F8FA948F150EF8C100ED4EAD /* AFAppDotNetAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFAppDotNetAPIClient.h; path = Classes/AFAppDotNetAPIClient.h; sourceTree = "<group>"; };
F8FA9490150EF8C100ED4EAD /* AFAppDotNetAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFAppDotNetAPIClient.m; path = Classes/AFAppDotNetAPIClient.m; sourceTree = "<group>"; };
F8FA9492150EF97E00ED4EAD /* Post.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Post.h; sourceTree = "<group>"; };
F8FA9493150EF97E00ED4EAD /* Post.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Post.m; sourceTree = "<group>"; };
F8FA9495150EF98800ED4EAD /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = "<group>"; };
F8FA9496150EF98800ED4EAD /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = "<group>"; };
F8FA9498150EF9DA00ED4EAD /* PublicTimelineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublicTimelineViewController.h; sourceTree = "<group>"; };
F8FA9499150EF9DA00ED4EAD /* PublicTimelineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PublicTimelineViewController.m; sourceTree = "<group>"; };
F8FA9498150EF9DA00ED4EAD /* GlobalTimelineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalTimelineViewController.h; sourceTree = "<group>"; };
F8FA9499150EF9DA00ED4EAD /* GlobalTimelineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GlobalTimelineViewController.m; sourceTree = "<group>"; };
F8FA949C150EFEC100ED4EAD /* AFHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPClient.h; sourceTree = "<group>"; };
F8FA949D150EFEC100ED4EAD /* AFHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPClient.m; sourceTree = "<group>"; };
F8FA949E150EFEC100ED4EAD /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = "<group>"; };
@ -84,8 +84,8 @@
F8FA94AE150EFEC100ED4EAD /* AFXMLRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFXMLRequestOperation.m; sourceTree = "<group>"; };
F8FA94AF150EFEC100ED4EAD /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+AFNetworking.h"; sourceTree = "<group>"; };
F8FA94B0150EFEC100ED4EAD /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+AFNetworking.m"; sourceTree = "<group>"; };
F8FA94BF150F019100ED4EAD /* TweetTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TweetTableViewCell.h; sourceTree = "<group>"; };
F8FA94C0150F019100ED4EAD /* TweetTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TweetTableViewCell.m; sourceTree = "<group>"; };
F8FA94BF150F019100ED4EAD /* PostTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostTableViewCell.h; sourceTree = "<group>"; };
F8FA94C0150F019100ED4EAD /* PostTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PostTableViewCell.m; sourceTree = "<group>"; };
F8FA94CC150F094D00ED4EAD /* profile-image-placeholder.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-image-placeholder.png"; path = "Images/profile-image-placeholder.png"; sourceTree = SOURCE_ROOT; };
F8FA94CD150F094D00ED4EAD /* profile-image-placeholder@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-image-placeholder@2x.png"; path = "Images/profile-image-placeholder@2x.png"; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
@ -110,8 +110,8 @@
F8DA09C61396AB690057D0CC /* Controllers */ = {
isa = PBXGroup;
children = (
F8FA9498150EF9DA00ED4EAD /* PublicTimelineViewController.h */,
F8FA9499150EF9DA00ED4EAD /* PublicTimelineViewController.m */,
F8FA9498150EF9DA00ED4EAD /* GlobalTimelineViewController.h */,
F8FA9499150EF9DA00ED4EAD /* GlobalTimelineViewController.m */,
);
name = Controllers;
path = Classes/Controllers;
@ -120,8 +120,8 @@
F8DA09C91396AB690057D0CC /* Models */ = {
isa = PBXGroup;
children = (
F8FA9492150EF97E00ED4EAD /* Tweet.h */,
F8FA9493150EF97E00ED4EAD /* Tweet.m */,
F8FA9492150EF97E00ED4EAD /* Post.h */,
F8FA9493150EF97E00ED4EAD /* Post.m */,
F8FA9495150EF98800ED4EAD /* User.h */,
F8FA9496150EF98800ED4EAD /* User.m */,
);
@ -132,8 +132,8 @@
F8DA09CC1396AB690057D0CC /* Views */ = {
isa = PBXGroup;
children = (
F8FA94BF150F019100ED4EAD /* TweetTableViewCell.h */,
F8FA94C0150F019100ED4EAD /* TweetTableViewCell.m */,
F8FA94BF150F019100ED4EAD /* PostTableViewCell.h */,
F8FA94C0150F019100ED4EAD /* PostTableViewCell.m */,
);
name = Views;
path = Classes/Views;
@ -211,8 +211,8 @@
F8E469B71395759C00DB05C8 /* Networking Extensions */ = {
isa = PBXGroup;
children = (
F8FA948F150EF8C100ED4EAD /* AFTwitterAPIClient.h */,
F8FA9490150EF8C100ED4EAD /* AFTwitterAPIClient.m */,
F8FA948F150EF8C100ED4EAD /* AFAppDotNetAPIClient.h */,
F8FA9490150EF8C100ED4EAD /* AFAppDotNetAPIClient.m */,
);
name = "Networking Extensions";
sourceTree = "<group>";
@ -325,10 +325,10 @@
buildActionMask = 2147483647;
files = (
F8DA09E41396AC040057D0CC /* main.m in Sources */,
F8FA9491150EF8C100ED4EAD /* AFTwitterAPIClient.m in Sources */,
F8FA9494150EF97E00ED4EAD /* Tweet.m in Sources */,
F8FA9491150EF8C100ED4EAD /* AFAppDotNetAPIClient.m in Sources */,
F8FA9494150EF97E00ED4EAD /* Post.m in Sources */,
F8FA9497150EF98800ED4EAD /* User.m in Sources */,
F8FA949A150EF9DA00ED4EAD /* PublicTimelineViewController.m in Sources */,
F8FA949A150EF9DA00ED4EAD /* GlobalTimelineViewController.m in Sources */,
F8FA94B1150EFEC100ED4EAD /* AFHTTPClient.m in Sources */,
F8FA94B2150EFEC100ED4EAD /* AFHTTPRequestOperation.m in Sources */,
F8FA94B3150EFEC100ED4EAD /* AFImageRequestOperation.m in Sources */,
@ -338,7 +338,7 @@
F8FA94B8150EFEC100ED4EAD /* AFURLConnectionOperation.m in Sources */,
F8FA94B9150EFEC100ED4EAD /* AFXMLRequestOperation.m in Sources */,
F8FA94BA150EFEC100ED4EAD /* UIImageView+AFNetworking.m in Sources */,
F8FA94C1150F019100ED4EAD /* TweetTableViewCell.m in Sources */,
F8FA94C1150F019100ED4EAD /* PostTableViewCell.m in Sources */,
F8129C7415910C37009BFE23 /* AppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View file

@ -43,7 +43,7 @@
@property (strong) IBOutlet NSWindow *window;
@property (strong) IBOutlet NSTableView *tableView;
@property (strong) IBOutlet NSArrayController *tweetsArrayController;
@property (strong) IBOutlet NSArrayController *postsArrayController;
@end

View file

@ -24,7 +24,7 @@
#if __IPHONE_OS_VERSION_MIN_REQUIRED
#import "PublicTimelineViewController.h"
#import "GlobalTimelineViewController.h"
#import "AFNetworkActivityIndicatorManager.h"
@ -40,7 +40,7 @@ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
UITableViewController *viewController = [[PublicTimelineViewController alloc] initWithStyle:UITableViewStylePlain];
UITableViewController *viewController = [[GlobalTimelineViewController alloc] initWithStyle:UITableViewStylePlain];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.navigationController.navigationBar.tintColor = [UIColor darkGrayColor];
@ -56,14 +56,14 @@ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
#else
#import "Tweet.h"
#import "Post.h"
#import "User.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize tableView = _tableView;
@synthesize tweetsArrayController = _tweetsArrayController;
@synthesize postsArrayController = _postsArrayController;
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
@ -71,12 +71,12 @@ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[self.window makeKeyAndOrderFront:self];
[Tweet publicTimelineTweetsWithBlock:^(NSArray *tweets, NSError *error) {
[Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) {
if (error) {
[[NSAlert alertWithMessageText:NSLocalizedString(@"Error", nil) defaultButton:NSLocalizedString(@"OK", nil) alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@",[error localizedDescription]] runModal];
}
self.tweetsArrayController.content = tweets;
self.postsArrayController.content = posts;
}];
[[NSNotificationCenter defaultCenter] addObserverForName:kUserProfileImageDidLoadNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {

View file

@ -1,4 +1,4 @@
// AFTwitterAPIClient.h
// AFAppDotNetAPIClient.h
//
// Copyright (c) 2012 Mattt Thompson (http://mattt.me/)
//
@ -23,8 +23,8 @@
#import <Foundation/Foundation.h>
#import "AFHTTPClient.h"
@interface AFTwitterAPIClient : AFHTTPClient
@interface AFAppDotNetAPIClient : AFHTTPClient
+ (AFTwitterAPIClient *)sharedClient;
+ (AFAppDotNetAPIClient *)sharedClient;
@end

View file

@ -1,4 +1,4 @@
// AFTwitterAPIClient.h
// AFAppDotNetAPIClient.h
//
// Copyright (c) 2012 Mattt Thompson (http://mattt.me/)
//
@ -20,19 +20,19 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import "AFTwitterAPIClient.h"
#import "AFAppDotNetAPIClient.h"
#import "AFJSONRequestOperation.h"
static NSString * const kAFTwitterAPIBaseURLString = @"http://api.twitter.com/1/";
static NSString * const kAFAppDotNetAPIBaseURLString = @"https://alpha-api.app.net/";
@implementation AFTwitterAPIClient
@implementation AFAppDotNetAPIClient
+ (AFTwitterAPIClient *)sharedClient {
static AFTwitterAPIClient *_sharedClient = nil;
+ (AFAppDotNetAPIClient *)sharedClient {
static AFAppDotNetAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[AFTwitterAPIClient alloc] initWithBaseURL:[NSURL URLWithString:kAFTwitterAPIBaseURLString]];
_sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:kAFAppDotNetAPIBaseURLString]];
});
return _sharedClient;

View file

@ -1,4 +1,4 @@
// PublicTimelineViewController.h
// GlobalTimelineViewController.h
//
// Copyright (c) 2012 Mattt Thompson (http://mattt.me/)
//
@ -22,6 +22,6 @@
#import <UIKit/UIKit.h>
@interface PublicTimelineViewController : UITableViewController
@interface GlobalTimelineViewController : UITableViewController
@end

View file

@ -1,4 +1,4 @@
// PublicTimelineViewController.m
// GlobalTimelineViewController.m
//
// Copyright (c) 2012 Mattt Thompson (http://mattt.me/)
//
@ -20,19 +20,19 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import "PublicTimelineViewController.h"
#import "GlobalTimelineViewController.h"
#import "Tweet.h"
#import "Post.h"
#import "TweetTableViewCell.h"
#import "PostTableViewCell.h"
@interface PublicTimelineViewController ()
@interface GlobalTimelineViewController ()
- (void)reload:(id)sender;
@end
@implementation PublicTimelineViewController {
@implementation GlobalTimelineViewController {
@private
NSArray *_tweets;
NSArray *_posts;
__strong UIActivityIndicatorView *_activityIndicatorView;
}
@ -41,11 +41,11 @@
[_activityIndicatorView startAnimating];
self.navigationItem.rightBarButtonItem.enabled = NO;
[Tweet publicTimelineTweetsWithBlock:^(NSArray *tweets, NSError *error) {
[Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) {
if (error) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
} else {
_tweets = tweets;
_posts = posts;
[self.tableView reloadData];
}
@ -82,37 +82,21 @@
[super viewDidUnload];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
}
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [_tweets count];
return [_posts count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
TweetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
PostTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[TweetTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell = [[PostTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.tweet = [_tweets objectAtIndex:indexPath.row];
cell.post = [_posts objectAtIndex:indexPath.row];
return cell;
}
@ -120,7 +104,7 @@
#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [TweetTableViewCell heightForCellWithTweet:[_tweets objectAtIndex:indexPath.row]];
return [PostTableViewCell heightForCellWithPost:[_posts objectAtIndex:indexPath.row]];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

View file

@ -1,4 +1,4 @@
// Tweet.h
// Post.h
//
// Copyright (c) 2012 Mattt Thompson (http://mattt.me/)
//
@ -24,15 +24,15 @@
@class User;
@interface Tweet : NSObject
@interface Post : NSObject
@property (readonly) NSUInteger tweetID;
@property (readonly) NSUInteger postID;
@property (readonly) NSString *text;
@property (readonly) User *user;
- (id)initWithAttributes:(NSDictionary *)attributes;
+ (void)publicTimelineTweetsWithBlock:(void (^)(NSArray *tweets, NSError *error))block;
+ (void)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block;
@end

View file

@ -1,4 +1,4 @@
// Tweet.m
// Post.m
//
// Copyright (c) 2012 Mattt Thompson (http://mattt.me/)
//
@ -20,13 +20,13 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import "Tweet.h"
#import "Post.h"
#import "User.h"
#import "AFTwitterAPIClient.h"
#import "AFAppDotNetAPIClient.h"
@implementation Tweet
@synthesize tweetID = _tweetID;
@implementation Post
@synthesize postID = _postID;
@synthesize text = _text;
@synthesize user = _user;
@ -36,7 +36,7 @@
return nil;
}
_tweetID = [[attributes valueForKeyPath:@"id"] integerValue];
_postID = [[attributes valueForKeyPath:@"id"] integerValue];
_text = [attributes valueForKeyPath:@"text"];
_user = [[User alloc] initWithAttributes:[attributes valueForKeyPath:@"user"]];
@ -46,16 +46,16 @@
#pragma mark -
+ (void)publicTimelineTweetsWithBlock:(void (^)(NSArray *tweets, NSError *error))block {
[[AFTwitterAPIClient sharedClient] getPath:@"statuses/public_timeline.json" parameters:[NSDictionary dictionaryWithObject:@"false" forKey:@"include_entities"] success:^(AFHTTPRequestOperation *operation, id JSON) {
NSMutableArray *mutableTweets = [NSMutableArray arrayWithCapacity:[JSON count]];
+ (void)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block {
[[AFAppDotNetAPIClient sharedClient] getPath:@"stream/0/posts/stream/global" parameters:nil success:^(AFHTTPRequestOperation *operation, id JSON) {
NSMutableArray *mutablePosts = [NSMutableArray arrayWithCapacity:[JSON count]];
for (NSDictionary *attributes in JSON) {
Tweet *tweet = [[Tweet alloc] initWithAttributes:attributes];
[mutableTweets addObject:tweet];
Post *post = [[Post alloc] initWithAttributes:attributes];
[mutablePosts addObject:post];
}
if (block) {
block([NSArray arrayWithArray:mutableTweets], nil);
block([NSArray arrayWithArray:mutablePosts], nil);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (block) {

View file

@ -28,7 +28,7 @@ extern NSString * const kUserProfileImageDidLoadNotification;
@property (readonly) NSUInteger userID;
@property (readonly) NSString *username;
@property (unsafe_unretained, readonly) NSURL *profileImageURL;
@property (unsafe_unretained, readonly) NSURL *avatarImageURL;
- (id)initWithAttributes:(NSDictionary *)attributes;

View file

@ -33,8 +33,8 @@ NSString * const kUserProfileImageDidLoadNotification = @"com.alamofire.user.pro
@implementation User {
@private
__strong NSString *_profileImageURLString;
__strong AFImageRequestOperation *_profileImageRequestOperation;
__strong NSString *_avatarImageURLString;
__strong AFImageRequestOperation *_avatarImageRequestOperation;
}
@synthesize userID = _userID;
@ -47,14 +47,14 @@ NSString * const kUserProfileImageDidLoadNotification = @"com.alamofire.user.pro
}
_userID = [[attributes valueForKeyPath:@"id"] integerValue];
_username = [attributes valueForKeyPath:@"screen_name"];
_profileImageURLString = [attributes valueForKeyPath:@"profile_image_url_https"];
_username = [attributes valueForKeyPath:@"username"];
_avatarImageURLString = [attributes valueForKeyPath:@"avatar_image.url"];
return self;
}
- (NSURL *)profileImageURL {
return [NSURL URLWithString:_profileImageURLString];
- (NSURL *)avatarImageURL {
return [NSURL URLWithString:_avatarImageURLString];
}
#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
@ -73,20 +73,20 @@ NSString * const kUserProfileImageDidLoadNotification = @"com.alamofire.user.pro
}
- (NSImage *)profileImage {
if (!_profileImage && !_profileImageRequestOperation) {
_profileImageRequestOperation = [AFImageRequestOperation imageRequestOperationWithRequest:[NSURLRequest requestWithURL:self.profileImageURL] success:^(NSImage *image) {
if (!_profileImage && !_avatarImageRequestOperation) {
_avatarImageRequestOperation = [AFImageRequestOperation imageRequestOperationWithRequest:[NSURLRequest requestWithURL:self.avatarImageURL] success:^(NSImage *image) {
self.profileImage = image;
_profileImageRequestOperation = nil;
_avatarImageRequestOperation = nil;
[[NSNotificationCenter defaultCenter] postNotificationName:kUserProfileImageDidLoadNotification object:self userInfo:nil];
}];
[_profileImageRequestOperation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
[_avatarImageRequestOperation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
return [[NSCachedURLResponse alloc] initWithResponse:cachedResponse.response data:cachedResponse.data userInfo:cachedResponse.userInfo storagePolicy:NSURLCacheStorageAllowed];
}];
[[[self class] sharedProfileImageRequestOperationQueue] addOperation:_profileImageRequestOperation];
[[[self class] sharedProfileImageRequestOperationQueue] addOperation:_avatarImageRequestOperation];
}
return _profileImage;

View file

@ -22,12 +22,12 @@
#import <UIKit/UIKit.h>
@class Tweet;
@class Post;
@interface TweetTableViewCell : UITableViewCell
@interface PostTableViewCell : UITableViewCell
@property (nonatomic, strong) Tweet *tweet;
@property (nonatomic, strong) Post *post;
+ (CGFloat)heightForCellWithTweet:(Tweet *)tweet;
+ (CGFloat)heightForCellWithPost:(Post *)post;
@end

View file

@ -20,19 +20,19 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import "TweetTableViewCell.h"
#import "PostTableViewCell.h"
#import "Tweet.h"
#import "Post.h"
#import "User.h"
#import "UIImageView+AFNetworking.h"
@implementation TweetTableViewCell {
@implementation PostTableViewCell {
@private
__strong Tweet *_tweet;
__strong Post *_post;
}
@synthesize tweet = _tweet;
@synthesize post = _post;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
@ -49,18 +49,18 @@
return self;
}
- (void)setTweet:(Tweet *)tweet {
_tweet = tweet;
- (void)setPost:(Post *)post {
_post = post;
self.textLabel.text = _tweet.user.username;
self.detailTextLabel.text = _tweet.text;
[self.imageView setImageWithURL:_tweet.user.profileImageURL placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]];
self.textLabel.text = _post.user.username;
self.detailTextLabel.text = _post.text;
[self.imageView setImageWithURL:_post.user.avatarImageURL placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]];
[self setNeedsLayout];
}
+ (CGFloat)heightForCellWithTweet:(Tweet *)tweet {
CGSize sizeToFit = [tweet.text sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(220.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
+ (CGFloat)heightForCellWithPost:(Post *)post {
CGSize sizeToFit = [post.text sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(220.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
return fmaxf(70.0f, sizeToFit.height + 45.0f);
}
@ -74,7 +74,7 @@
self.textLabel.frame = CGRectMake(70.0f, 10.0f, 240.0f, 20.0f);
CGRect detailTextLabelFrame = CGRectOffset(self.textLabel.frame, 0.0f, 25.0f);
detailTextLabelFrame.size.height = [[self class] heightForCellWithTweet:_tweet] - 45.0f;
detailTextLabelFrame.size.height = [[self class] heightForCellWithPost:_post] - 45.0f;
self.detailTextLabel.frame = detailTextLabelFrame;
}

View file

@ -1,33 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1070</int>
<string key="IBDocument.SystemVersion">11E53</string>
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
<string key="IBDocument.AppKitVersion">1138.47</string>
<string key="IBDocument.HIToolboxVersion">569.00</string>
<int key="IBDocument.SystemTarget">1080</int>
<string key="IBDocument.SystemVersion">12B19</string>
<string key="IBDocument.InterfaceBuilderVersion">2840</string>
<string key="IBDocument.AppKitVersion">1187</string>
<string key="IBDocument.HIToolboxVersion">624.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">2182</string>
<string key="NS.object.0">2840</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSScroller</string>
<string>NSArrayController</string>
<string>NSMenuItem</string>
<string>NSMenu</string>
<string>NSScrollView</string>
<string>NSTextFieldCell</string>
<string>NSImageView</string>
<string>NSImageCell</string>
<string>NSTableView</string>
<string>NSTableCellView</string>
<string>IBNSLayoutConstraint</string>
<string>NSArrayController</string>
<string>NSCustomObject</string>
<string>NSImageCell</string>
<string>NSImageView</string>
<string>NSMenu</string>
<string>NSMenuItem</string>
<string>NSScrollView</string>
<string>NSScroller</string>
<string>NSTableCellView</string>
<string>NSTableColumn</string>
<string>NSTableView</string>
<string>NSTextField</string>
<string>NSTextFieldCell</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
<string>NSTableColumn</string>
<string>NSTextField</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -395,7 +395,7 @@
<string key="NSWindowContentMaxSize">{375, 1280}</string>
<string key="NSWindowContentMinSize">{375, 200}</string>
<object class="NSView" key="NSWindowView" id="439893737">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -412,12 +412,16 @@
<object class="NSTableView" id="256434433">
<reference key="NSNextResponder" ref="411548182"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<string key="NSFrameSize">{331, 498}</string>
<reference key="NSSuperview" ref="411548182"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="505772708"/>
<string key="NSReuseIdentifierKey">_NS:1197</string>
<bool key="NSEnabled">YES</bool>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSControlAllowsExpansionToolTips">YES</bool>
<object class="_NSCornerView" key="NSCornerView">
<nil key="NSNextResponder"/>
<int key="NSvFlags">-2147483392</int>
@ -431,7 +435,7 @@
<double key="NSMinWidth">70</double>
<double key="NSMaxWidth">10000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75628096</int>
<int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport">
@ -454,13 +458,8 @@
</object>
</object>
<object class="NSImageCell" key="NSDataCell" id="717955434">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags">134217728</int>
<int key="NSCellFlags2">33554432</int>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
<string key="NSCellIdentifier">_NS:4045</string>
<int key="NSAlign">1</int>
<int key="NSScale">0</int>
@ -502,7 +501,6 @@
</object>
<string key="NSFrame">{{1, 1}, {331, 498}}</string>
<reference key="NSSuperview" ref="905625827"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="256434433"/>
<string key="NSReuseIdentifierKey">_NS:1195</string>
<reference key="NSDocView" ref="256434433"/>
@ -522,9 +520,9 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
<reference key="NSSuperview" ref="905625827"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="870849666"/>
<string key="NSReuseIdentifierKey">_NS:1214</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="905625827"/>
<string key="NSAction">_doScroller:</string>
<double key="NSPercent">0.99815157116451014</double>
@ -534,8 +532,8 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 484}, {373, 15}}</string>
<reference key="NSSuperview" ref="905625827"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:1216</string>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="905625827"/>
<string key="NSAction">_doScroller:</string>
@ -544,7 +542,6 @@
</object>
<string key="NSFrame">{{-1, 0}, {333, 500}}</string>
<reference key="NSSuperview" ref="439893737"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="411548182"/>
<string key="NSReuseIdentifierKey">_NS:1193</string>
<int key="NSsFlags">133682</int>
@ -552,11 +549,12 @@
<reference key="NSHScroller" ref="870849666"/>
<reference key="NSContentView" ref="411548182"/>
<bytes key="NSScrollAmts">QSAAAEEgAABCvgAAQr4AAA</bytes>
<double key="NSMinMagnification">0.25</double>
<double key="NSMaxMagnification">4</double>
<double key="NSMagnification">1</double>
</object>
</object>
<string key="NSFrameSize">{331, 500}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="905625827"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
@ -743,14 +741,6 @@
</object>
<int key="connectionID">532</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">tweetsArrayController</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="680254480"/>
</object>
<int key="connectionID">609</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">tableView</string>
@ -759,6 +749,14 @@
</object>
<int key="connectionID">848</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">postsArrayController</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="680254480"/>
</object>
<int key="connectionID">849</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: arrangedObjects</string>
@ -792,7 +790,7 @@
<string key="NSAntiCompressionPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="602054441">
<int key="NSCellFlags">67239488</int>
<int key="NSCellFlags">67108928</int>
<int key="NSCellFlags2">272631808</int>
<string key="NSContents">Username</string>
<object class="NSFont" key="NSSupport">
@ -814,6 +812,7 @@
<reference key="NSColor" ref="840334811"/>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSImageView" id="615770799">
<reference key="NSNextResponder" ref="505772708"/>
@ -836,7 +835,7 @@
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="1006424888">
<int key="NSCellFlags">130560</int>
<int key="NSCellFlags">134217728</int>
<int key="NSCellFlags2">33554432</int>
<string key="NSCellIdentifier">_NS:9</string>
<int key="NSAlign">0</int>
@ -844,6 +843,7 @@
<int key="NSStyle">1</int>
<bool key="NSAnimates">NO</bool>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSEditable">YES</bool>
</object>
<object class="NSTextField" id="472484220">
@ -856,7 +856,7 @@
<string key="NSAntiCompressionPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="429971541">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad mi.</string>
<object class="NSFont" key="NSSupport">
@ -869,6 +869,7 @@
<reference key="NSBackgroundColor" ref="790157350"/>
<reference key="NSTextColor" ref="475189419"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrame">{{5, 5}, {321, 85}}</string>
@ -1115,10 +1116,10 @@
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="439893737"/>
<int key="scoringType">5</int>
<float key="scoringTypeFloat">22</float>
<int key="contentType">2</int>
<reference key="containingView" ref="439893737"/>
</object>
<object class="IBNSLayoutConstraint" id="792626335">
<reference key="firstItem" ref="439893737"/>
@ -1131,10 +1132,10 @@
<double key="value">-1</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="439893737"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
<reference key="containingView" ref="439893737"/>
</object>
<object class="IBNSLayoutConstraint" id="865651107">
<reference key="firstItem" ref="905625827"/>
@ -1147,10 +1148,10 @@
<double key="value">-1</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="439893737"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
<reference key="containingView" ref="439893737"/>
</object>
<object class="IBNSLayoutConstraint" id="590922666">
<reference key="firstItem" ref="905625827"/>
@ -1163,10 +1164,10 @@
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="439893737"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
<reference key="containingView" ref="439893737"/>
</object>
</object>
<reference key="parent" ref="972006081"/>
@ -1262,119 +1263,6 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="373530427"/>
<reference ref="472484220"/>
<object class="IBNSLayoutConstraint" id="716515170">
<reference key="firstItem" ref="472484220"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">26</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
<reference key="containingView" ref="505772708"/>
</object>
<reference ref="615770799"/>
<object class="IBNSLayoutConstraint" id="124660203">
<reference key="firstItem" ref="615770799"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">17</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="210332473">
<reference key="firstItem" ref="615770799"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">11</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="971396673">
<reference key="firstItem" ref="505772708"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="373530427"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">3</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="14444973">
<reference key="firstItem" ref="373530427"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="472484220"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="1049409873">
<reference key="firstItem" ref="373530427"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">3</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="226440407">
<reference key="firstItem" ref="373530427"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="472484220"/>
<int key="secondAttribute">9</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="376417113">
<reference key="firstItem" ref="472484220"/>
<int key="firstAttribute">5</int>
@ -1386,10 +1274,26 @@
<double key="value">87</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="716515170">
<reference key="firstItem" ref="472484220"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">26</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="958031551">
<reference key="firstItem" ref="373530427"/>
@ -1402,11 +1306,108 @@
<double key="value">87</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
<reference key="containingView" ref="505772708"/>
</object>
<object class="IBNSLayoutConstraint" id="226440407">
<reference key="firstItem" ref="373530427"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="472484220"/>
<int key="secondAttribute">9</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="1049409873">
<reference key="firstItem" ref="373530427"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">3</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="14444973">
<reference key="firstItem" ref="373530427"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="472484220"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="971396673">
<reference key="firstItem" ref="505772708"/>
<int key="firstAttribute">6</int>
<int key="relation">0</int>
<reference key="secondItem" ref="373530427"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">3</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="210332473">
<reference key="firstItem" ref="615770799"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">11</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="124660203">
<reference key="firstItem" ref="615770799"/>
<int key="firstAttribute">5</int>
<int key="relation">0</int>
<reference key="secondItem" ref="505772708"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">17</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="505772708"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<reference ref="615770799"/>
</object>
<reference key="parent" ref="553559566"/>
</object>
@ -1427,10 +1428,10 @@
<double key="value">17</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="373530427"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
<reference key="containingView" ref="373530427"/>
</object>
</object>
<reference key="parent" ref="505772708"/>
@ -1457,10 +1458,10 @@
<double key="value">50</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="615770799"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">1</int>
<reference key="containingView" ref="615770799"/>
</object>
<object class="IBNSLayoutConstraint" id="1014208838">
<reference key="firstItem" ref="615770799"/>
@ -1473,10 +1474,10 @@
<double key="value">50</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="615770799"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
<reference key="containingView" ref="615770799"/>
</object>
</object>
<reference key="parent" ref="505772708"/>
@ -1503,10 +1504,10 @@
<double key="value">34</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="472484220"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">1</int>
<reference key="containingView" ref="472484220"/>
</object>
<object class="IBNSLayoutConstraint" id="398152041">
<reference key="firstItem" ref="472484220"/>
@ -1519,10 +1520,10 @@
<double key="value">56</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="472484220"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
<reference key="containingView" ref="472484220"/>
</object>
<object class="IBNSLayoutConstraint" id="775719842">
<reference key="firstItem" ref="472484220"/>
@ -1535,10 +1536,10 @@
<double key="value">230</double>
</object>
<float key="priority">652</float>
<reference key="containingView" ref="472484220"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">1</int>
<reference key="containingView" ref="472484220"/>
</object>
</object>
<reference key="parent" ref="505772708"/>
@ -1894,7 +1895,7 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSMutableArray">
<object class="NSArray">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="124660203"/>
<reference ref="210332473"/>
@ -1902,9 +1903,9 @@
<reference ref="14444973"/>
<reference ref="1049409873"/>
<reference ref="226440407"/>
<reference ref="376417113"/>
<reference ref="958031551"/>
<reference ref="716515170"/>
<reference ref="376417113"/>
</object>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSMutableArray">
@ -1981,7 +1982,7 @@
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
<int key="maxID">848</int>
<int key="maxID">849</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">