Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Examples/MMRecordPerformance/Icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Examples/MMRecordPerformance/Icon@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// ADNPostsViewController.h
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 11/20/12.
// Copyright (c) 2012 Mutual Mobile. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ADNPostsViewController : UITableViewController

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
//
// ADNPostsViewController.m
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 11/20/12.
// Copyright (c) 2012 Mutual Mobile. All rights reserved.
//

#import "ADNPostsViewController.h"

#import "MMDataManager.h"
#import "Post.h"
#import "PostCell.h"

@interface ADNPostsViewController ()

@property (nonatomic, copy) NSArray *posts;

@end

@implementation ADNPostsViewController

- (void)viewDidLoad {
[super viewDidLoad];

[self.tableView registerNib:[UINib nibWithNibName:@"PostCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"PostCell"];

[self getPosts];
}


#pragma mark - Posts Request Methods

- (void)getPosts {
NSManagedObjectContext *context = [[MMDataManager sharedDataManager] managedObjectContext];

[Post
getStreamPostsWithContext:context
domain:self
resultBlock:^(NSArray *posts) {
[self populatePostsTableWithPosts:posts];
[Post
getStreamPostsWithContext:context
domain:self
resultBlock:^(NSArray *posts) {
[self populatePostsTableWithPosts:posts];
}
failureBlock:^(NSError *error) {
[self endRequestingPosts];
}];
}
failureBlock:^(NSError *error) {
[self endRequestingPosts];
}];
}


#pragma mark - UITableViewDelegate and DataSource Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.posts count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [PostCell height];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
PostCell *cell = (PostCell *)[tableView dequeueReusableCellWithIdentifier:@"PostCell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;

Post *post = [self postForIndexPath:indexPath];

[cell populateWithPost:post];

return cell;
}


#pragma mark - Utility Methods

- (Post *)postForIndexPath:(NSIndexPath *)indexPath {
NSInteger row = indexPath.row;

return [self.posts objectAtIndex:row];
}

- (void)populatePostsTableWithPosts:(NSArray *)posts {
self.posts = posts;
[self.tableView reloadData];
}

- (void)endRequestingPosts {
[self.refreshControl endRefreshing];
}

@end
13 changes: 13 additions & 0 deletions Examples/MMRecordPerformance/MMRecordAppDotNet/ADNRecord.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// ADNRecord.h
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 11/20/12.
// Copyright (c) 2012 Mutual Mobile. All rights reserved.
//

#import "MMRecord.h"

@interface ADNRecord : MMRecord

@end
29 changes: 29 additions & 0 deletions Examples/MMRecordPerformance/MMRecordAppDotNet/ADNRecord.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//
// ADNRecord.m
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 11/20/12.
// Copyright (c) 2012 Mutual Mobile. All rights reserved.
//

#import "ADNRecord.h"

static NSDateFormatter *ADNRecordDateFormatter;

@implementation ADNRecord

+ (NSString *)keyPathForResponseObject {
return @"data";
}

+ (NSDateFormatter *)dateFormatter {
if (!ADNRecordDateFormatter) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; // "2012-11-21T03:57:39Z"
ADNRecordDateFormatter = dateFormatter;
}

return ADNRecordDateFormatter;
}

@end
18 changes: 18 additions & 0 deletions Examples/MMRecordPerformance/MMRecordAppDotNet/ADNUserManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// TWUserManager.h
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 3/23/13.
// Copyright (c) 2013 Mutual Mobile. All rights reserved.
//

#import "MMDataManager.h"

@class User;

@interface ADNUserManager : NSObject

- (NSFetchedResultsController *)usersFetchedResultsController;
- (NSFetchedResultsController *)postsFetchedResultsControllerForUser:(User *)user;

@end
41 changes: 41 additions & 0 deletions Examples/MMRecordPerformance/MMRecordAppDotNet/ADNUserManager.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// TWUserManager.m
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 3/23/13.
// Copyright (c) 2013 Mutual Mobile. All rights reserved.
//

#import "ADNUserManager.h"

@implementation ADNUserManager

- (NSFetchedResultsController *)usersFetchedResultsController {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
fetchRequest.sortDescriptors = @[sortDescriptor];

NSManagedObjectContext *context = [[MMDataManager sharedDataManager] managedObjectContext];

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
[controller performFetch:NULL];

return controller;
}

- (NSFetchedResultsController *)postsFetchedResultsControllerForUser:(User *)user {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Post"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.user = %@", user];
fetchRequest.sortDescriptors = @[sortDescriptor];
fetchRequest.predicate = predicate;

NSManagedObjectContext *context = [[MMDataManager sharedDataManager] managedObjectContext];

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
[controller performFetch:NULL];

return controller;
}

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// ADNUserPostsViewController.h
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 3/23/13.
// Copyright (c) 2013 Mutual Mobile. All rights reserved.
//

#import <UIKit/UIKit.h>

@class User;

@interface ADNUserPostsViewController : UIViewController

@property (nonatomic, strong) User *user;

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
//
// ADNUserPostsViewController.m
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 3/23/13.
// Copyright (c) 2013 Mutual Mobile. All rights reserved.
//

#import "ADNUserPostsViewController.h"

#import "ADNUserManager.h"
#import "AFNetworking.h"
#import "Counts.h"
#import "MMDataManager.h"
#import "Post.h"
#import "PostCell.h"
#import "User.h"

@interface ADNUserPostsViewController ()<UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate>

@property (nonatomic, strong) IBOutlet UIImageView *coverImageView;
@property (nonatomic, strong) IBOutlet UITableView *tableView;

@property (nonatomic, strong) ADNUserManager *userManager;
@property (nonatomic, strong) NSFetchedResultsController *resultsController;

@end

@implementation ADNUserPostsViewController

- (void)viewDidLoad {
[super viewDidLoad];

self.userManager = [[ADNUserManager alloc] init];
self.resultsController = [self.userManager postsFetchedResultsControllerForUser:self.user];
self.resultsController.delegate = self;

[self.coverImageView setImageWithURL:self.user.coverURL placeholderImage:[UIImage imageNamed:@"avatar"]];

self.title = self.user.name;

[self.tableView registerNib:[UINib nibWithNibName:@"PostCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"PostCell"];
}


#pragma mark - Private Methods

- (Post *)postForIndexPath:(NSIndexPath *)indexPath {
return [self.resultsController objectAtIndexPath:indexPath];
}



#pragma mark - UITableViewDelegate and DataSource Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[self.resultsController fetchedObjects] count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [PostCell height];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
PostCell *cell = (PostCell *)[tableView dequeueReusableCellWithIdentifier:@"PostCell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;

Post *post = [self postForIndexPath:indexPath];

[cell populateWithPost:post];

return cell;
}


#pragma mark - NSFetchedResultsControllerDelegate Methods

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView reloadData];
}


@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// ADNUserSearchViewController.h
// MMRecordAppDotNet
//
// Created by Conrad Stoll on 3/23/13.
// Copyright (c) 2013 Mutual Mobile. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ADNUserSearchViewController : UIViewController

@end
Loading