Skip to content

Commit 9ba8b76

Browse files
Alfredo UribeAlfredo Uribe
authored andcommitted
moved observer block code into own methods
1 parent 58fa536 commit 9ba8b76

1 file changed

Lines changed: 83 additions & 68 deletions

File tree

EasyReader/Application/Controllers/Home/CSHomeViewController.m

Lines changed: 83 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
#import "User.h"
1919
#import <AFNetworking/UIImageView+AFNetworking.h>
2020

21-
2221
#import "CSFeedItemCell.h"
2322

23+
2424
@interface CSHomeViewController ()
2525
{
2626
NSString *currentURL;
@@ -45,7 +45,7 @@ - (void)viewDidLoad
4545
[self setUpVerticalScrollView];
4646
[self setUpCollectionView];
4747
[self setUpWebView];
48-
[self setupFeedItemObserver];
48+
[self setupFeedsObserver];
4949
}
5050

5151
- (void)viewDidLayoutSubviews
@@ -70,81 +70,96 @@ -(BOOL)shouldAutorotate {
7070
//{
7171
// }
7272
/**
73-
* Assigns observers for feeds and feed items, puts page controller at start
73+
* Assigns observers for feeds
7474
*/
75-
- (void) setupFeedItemObserver
75+
- (void) setupFeedsObserver
7676
{
7777

7878
[self observeRelationship:@keypath(self.currentUser.feeds)
79-
changeBlock:^(__weak CSHomeViewController *self, NSSet *old, NSSet *new) {
80-
NSMutableArray *addedFeeds = [[new allObjects] mutableCopy];
81-
NSMutableArray *removedFeeds = [[old allObjects] mutableCopy];
82-
83-
[addedFeeds removeObjectsInArray:[old allObjects]];
84-
[removedFeeds removeObjectsInArray:[new allObjects]];
85-
86-
for ( Feed *feed in removedFeeds ){
87-
[feed removeAllObservations];
88-
89-
// Remove feed items associated to the feed
90-
for( FeedItem *item in feed.feedItems ){
91-
[_feedItems removeObject:item];
92-
}
93-
94-
// Delete feed which will cascade delete feed items
95-
[feed deleteEntity];
96-
[[NSManagedObjectContext defaultContext] saveToPersistentStoreAndWait];
97-
}
98-
99-
for ( Feed *feed in addedFeeds ){
100-
[feed observeRelationship:@"feedItems"
101-
changeBlock:^(__weak Feed *feed, NSSet *old, NSSet *new) {
102-
103-
_feedItems = [(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems];
104-
105-
if(!new) {
106-
NSLog(@"There are no feeds here");
107-
} else {
108-
NSMutableArray *addedFeedItems = [[new allObjects] mutableCopy];
109-
NSMutableArray *removedFeedItems = [[old allObjects] mutableCopy];
110-
111-
[addedFeedItems removeObjectsInArray:[old allObjects]];
112-
[removedFeedItems removeObjectsInArray:[new allObjects]];
113-
114-
for( FeedItem *item in removedFeedItems ){
115-
[_feedItems removeObject:item];
116-
}
117-
118-
for( FeedItem *item in addedFeedItems ){
119-
[_feedItems addObject:item];
120-
}
121-
122-
[_pageControl_itemIndicator.button_newItem setHidden:NO];
123-
}
124-
}
125-
insertionBlock:nil
126-
removalBlock:nil
127-
replacementBlock:nil];
128-
}
129-
//redraw the collection with the changes to the feed items
130-
[_feedCollectionViewDataSource sortFeedItems];
131-
[_collectionView_feedItems reloadData];
132-
_pageControl_itemIndicator.numberOfPages = [_feedItems count] < 6 ? [_feedItems count] : 5;
133-
134-
if(_currentFeedItem){
135-
[self scrollToCurrentFeedItem];
136-
[_pageControl_itemIndicator setPageControllerPageAtIndex:[_feedCollectionViewDataSource.sortedFeedItems indexOfObject:_currentFeedItem]
137-
forCollection:_feedItems];
138-
} else {
139-
[_pageControl_itemIndicator setPageControllerPageAtIndex:0 forCollection:_feedItems];
140-
}
79+
changeBlock:^(__weak CSHomeViewController *self, NSSet *old, NSSet *new){
80+
[self feedsDidChange:old new:new];
14181
}
14282
insertionBlock:nil
14383
removalBlock:nil
14484
replacementBlock:nil
14585
];
14686
}
14787

88+
/**
89+
* Assigns observers for feedsItems when feeds array on current user changes
90+
*/
91+
-(void) feedsDidChange:(NSSet*)old new:(NSSet*)new
92+
{
93+
NSMutableArray *addedFeeds = [[new allObjects] mutableCopy];
94+
NSMutableArray *removedFeeds = [[old allObjects] mutableCopy];
95+
96+
[addedFeeds removeObjectsInArray:[old allObjects]];
97+
[removedFeeds removeObjectsInArray:[new allObjects]];
98+
99+
for ( Feed *feed in removedFeeds ){
100+
[feed removeAllObservations];
101+
102+
// Remove feed items associated to the feed
103+
for( FeedItem *item in feed.feedItems ){
104+
[_feedItems removeObject:item];
105+
}
106+
107+
// Delete feed which will cascade delete feed items
108+
[feed deleteEntity];
109+
[[NSManagedObjectContext defaultContext] saveToPersistentStoreAndWait];
110+
}
111+
112+
for ( Feed *feed in addedFeeds ){
113+
[feed observeRelationship:@"feedItems"
114+
changeBlock:^(__weak Feed *feed, NSSet *old, NSSet *new) {
115+
[self feedItemsDidChange:old new:new];
116+
}
117+
insertionBlock:nil
118+
removalBlock:nil
119+
replacementBlock:nil];
120+
}
121+
//redraw the collection with the changes to the feed items
122+
[_feedCollectionViewDataSource sortFeedItems];
123+
[_collectionView_feedItems reloadData];
124+
_pageControl_itemIndicator.numberOfPages = [_feedItems count] < 6 ? [_feedItems count] : 5;
125+
126+
if(_currentFeedItem){
127+
[self scrollToCurrentFeedItem];
128+
[_pageControl_itemIndicator setPageControllerPageAtIndex:[_feedCollectionViewDataSource.sortedFeedItems indexOfObject:_currentFeedItem]
129+
forCollection:_feedItems];
130+
} else {
131+
[_pageControl_itemIndicator setPageControllerPageAtIndex:0 forCollection:_feedItems];
132+
}
133+
}
134+
135+
/**
136+
* Called when feedItems array on observed feeds change, shows new item button on page control
137+
*/
138+
-(void) feedItemsDidChange:(NSSet*)old new:(NSSet*)new
139+
{
140+
_feedItems = [(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems];
141+
142+
if(!new) {
143+
NSLog(@"There are no feeds here");
144+
} else {
145+
NSMutableArray *addedFeedItems = [[new allObjects] mutableCopy];
146+
NSMutableArray *removedFeedItems = [[old allObjects] mutableCopy];
147+
148+
[addedFeedItems removeObjectsInArray:[old allObjects]];
149+
[removedFeedItems removeObjectsInArray:[new allObjects]];
150+
151+
for( FeedItem *item in removedFeedItems ){
152+
[_feedItems removeObject:item];
153+
}
154+
155+
for( FeedItem *item in addedFeedItems ){
156+
[_feedItems addObject:item];
157+
}
158+
159+
[_pageControl_itemIndicator.button_newItem setHidden:NO];
160+
}
161+
}
162+
148163
#pragma mark - IBActions
149164

150165
// Receives left menu link click
@@ -161,7 +176,7 @@ -(void)setUpVerticalScrollView{
161176
NSInteger width = self.verticalScrollView.frame.size.width;
162177
NSInteger height = self.verticalScrollView.frame.size.height;
163178
self.verticalScrollView.contentSize = CGSizeMake(width, height*2);
164-
179+
165180
self.verticalScrollView.pagingEnabled =YES;
166181
self.verticalScrollView.delegate = self;
167182
}
@@ -173,7 +188,7 @@ - (void)setUpCollectionView
173188
{
174189
// NSArray *feedItems = [FeedItem MR_findAll];
175190
NSSet *feedItems = _currentUser.feedItems;
176-
191+
177192
_feedCollectionViewDataSource =
178193
[[CSFeedItemCollectionViewDataSource alloc] initWithFeedItems:feedItems
179194
reusableCellIdentifier:@"feedItemCell"

0 commit comments

Comments
 (0)