diff --git a/openbis-ipad/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate index 4aafb5de0c758b66ed527e9d5bc8d8db96dc5dc4..03927c4f6ff207b0f6316ab6ac2e2c3138641c2a 100644 Binary files a/openbis-ipad/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate and b/openbis-ipad/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/openbis-ipad/openBIS/openBIS/CISDOBAppDelegate.m b/openbis-ipad/openBIS/openBIS/CISDOBAppDelegate.m index e9d068f017062c7aa61889acd3f40a2ab87f1509..6bbbfa69db87c53f6f107e7ad2d7d749d63576a7 100644 --- a/openbis-ipad/openBIS/openBIS/CISDOBAppDelegate.m +++ b/openbis-ipad/openBIS/openBIS/CISDOBAppDelegate.m @@ -55,7 +55,7 @@ { // Initialize the controller CISDOBMasterViewController *controller = [self masterViewController]; - controller.managedObjectContext = self.managedObjectContext; + controller.openBisModel = self.openBisModel; return YES; } diff --git a/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.h b/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.h index 4fe19d74dbcc174401892b6f7f9cfdcc5da93cf6..d970df5ca84637d9281fb610f0d076204affddb2 100644 --- a/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.h +++ b/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.h @@ -23,15 +23,15 @@ #import <UIKit/UIKit.h> -@class CISDOBDetailViewController; +@class CISDOBDetailViewController, CISDOBOpenBisModel; #import <CoreData/CoreData.h> @interface CISDOBMasterViewController : UITableViewController <NSFetchedResultsControllerDelegate> @property (strong, nonatomic) CISDOBDetailViewController *detailViewController; +@property (strong, nonatomic) CISDOBOpenBisModel *openBisModel; @property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; -@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; @end diff --git a/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.m b/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.m index 6f070b5d8f6fc1e34920dbcacbfeecb5e451dde4..cf5a12d9e7fc8f3fb0fb60ecec73b52c900eadce 100644 --- a/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.m +++ b/openbis-ipad/openBIS/openBIS/CISDOBMasterViewController.m @@ -25,6 +25,7 @@ #import "CISDOBDetailViewController.h" #import "CISDOBIpadEntity.h" +#import "CISDOBOpenBisModel.h" @interface CISDOBMasterViewController () - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; @@ -148,7 +149,7 @@ if ([object.childrenPermIds count] > 0) { UIStoryboard *storyboard = self.storyboard; CISDOBMasterViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Drill"]; - controller.managedObjectContext = self.managedObjectContext; + controller.openBisModel = self.openBisModel; controller.title = object.summaryHeader; // TODO Initialize the fetch results controller @@ -168,36 +169,23 @@ } } +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath +{ + CISDOBIpadEntity *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; + cell.textLabel.text = [object valueForKey:@"summaryHeader"]; + cell.detailTextLabel.text = [object valueForKey:@"summary"]; + if ([object.childrenPermIds count] > 0) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } else { + cell.accessoryType = UITableViewCellAccessoryNone; + } +} + #pragma mark - Fetched results controller - (NSFetchedResultsController *)fetchedResultsController { - if (_fetchedResultsController != nil) { - return _fetchedResultsController; - } - - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - NSEntityDescription *entity = [NSEntityDescription entityForName: @"CISDOBIpadEntity" inManagedObjectContext: self.managedObjectContext]; - [fetchRequest setEntity:entity]; - [fetchRequest setFetchBatchSize:20]; - - NSSortDescriptor *groupSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"group" ascending: NO]; - NSSortDescriptor *summaryHeaderSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"summaryHeader" ascending: YES]; - NSArray *sortDescriptors = @[groupSortDescriptor, summaryHeaderSortDescriptor]; - [fetchRequest setSortDescriptors:sortDescriptors]; - - NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest managedObjectContext: self.managedObjectContext sectionNameKeyPath: @"group" cacheName: @"Master"]; - aFetchedResultsController.delegate = self; - self.fetchedResultsController = aFetchedResultsController; - - NSError *error = nil; - if (![self.fetchedResultsController performFetch:&error]) { - // TODO Implement error handling - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - abort(); - } - - return _fetchedResultsController; + return self.openBisModel.fetchedResultsController; } - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller @@ -260,16 +248,13 @@ } */ -- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath + +#pragma mark - Properties + +- (void)setOpenBisModel:(CISDOBOpenBisModel *)openBisModel { - CISDOBIpadEntity *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; - cell.textLabel.text = [object valueForKey:@"summaryHeader"]; - cell.detailTextLabel.text = [object valueForKey:@"summary"]; - if ([object.childrenPermIds count] > 0) { - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - } else { - cell.accessoryType = UITableViewCellAccessoryNone; - } + _openBisModel = openBisModel; + _openBisModel.delegate = self; } @end diff --git a/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.h b/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.h index d501eed5d41656f340a0a7457c664657a51a4b65..e0b5d97c36e42a601f7d012eaeceee91b1d7b87e 100644 --- a/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.h +++ b/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.h @@ -25,12 +25,13 @@ /** * \brief A model for the interaction with openBIS. */ -@interface CISDOBOpenBisModel : NSObject { +@interface CISDOBOpenBisModel : NSObject <NSFetchedResultsControllerDelegate> { } @property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; +@property (weak, nonatomic) id <NSFetchedResultsControllerDelegate> delegate; @end diff --git a/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m b/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m index 12867155a3cc31760b5d01caee2b34e37a1fdafd..571ff1d55d0d0f3b123e92ac9c057e382f619cf6 100644 --- a/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m +++ b/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m @@ -24,4 +24,61 @@ @implementation CISDOBOpenBisModel +#pragma mark - Fetched results controller + +- (NSFetchedResultsController *)fetchedResultsController +{ + if (_fetchedResultsController != nil) { + return _fetchedResultsController; + } + + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; + NSEntityDescription *entity = [NSEntityDescription entityForName: @"CISDOBIpadEntity" inManagedObjectContext: self.managedObjectContext]; + [fetchRequest setEntity:entity]; + [fetchRequest setFetchBatchSize:20]; + + NSSortDescriptor *groupSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"group" ascending: NO]; + NSSortDescriptor *summaryHeaderSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"summaryHeader" ascending: YES]; + NSArray *sortDescriptors = @[groupSortDescriptor, summaryHeaderSortDescriptor]; + [fetchRequest setSortDescriptors:sortDescriptors]; + + NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest managedObjectContext: self.managedObjectContext sectionNameKeyPath: @"group" cacheName: @"Master"]; + aFetchedResultsController.delegate = self; + self.fetchedResultsController = aFetchedResultsController; + + NSError *error = nil; + if (![self.fetchedResultsController performFetch:&error]) { + // TODO Implement error handling + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return _fetchedResultsController; +} + +- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller +{ + [self.delegate controllerWillChangeContent: controller]; +} + +- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo + atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type +{ + [self.delegate controller: controller didChangeSection: sectionInfo atIndex: sectionIndex forChangeType: type]; +} + +- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject + atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type + newIndexPath:(NSIndexPath *)newIndexPath +{ + [self.delegate controller: controller didChangeObject: anObject + atIndexPath: indexPath forChangeType: type + newIndexPath: newIndexPath]; +} + +- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller +{ + [self.delegate controllerDidChangeContent: controller]; +} + @end