diff --git a/openbis-ipad/BisKit/Classes/persistent-data-model.xcdatamodeld/persistent-data-model.xcdatamodel/contents b/openbis-ipad/BisKit/Classes/persistent-data-model.xcdatamodeld/persistent-data-model.xcdatamodel/contents index b4b2370f4ed2b3bdea0660503584465115cc8798..e2e680bdf807f148375bb2b99e436cd5dce0554d 100644 --- a/openbis-ipad/BisKit/Classes/persistent-data-model.xcdatamodeld/persistent-data-model.xcdatamodel/contents +++ b/openbis-ipad/BisKit/Classes/persistent-data-model.xcdatamodeld/persistent-data-model.xcdatamodel/contents @@ -14,6 +14,7 @@ <attribute name="summaryHeader" optional="YES" attributeType="String" syncable="YES"/> </entity> <fetchRequest name="EntitiesByPermIds" entity="CISDOBIpadEntity" predicateString="permId IN $PERM_IDS" fetchBatchSize="20"/> + <fetchRequest name="EntityAndChildren" entity="CISDOBIpadEntity" predicateString="SELF == $ENTITY OR permId IN $CHILDREN" fetchBatchSize="20"/> <elements> <element name="CISDOBIpadEntity" positionX="160" positionY="192" width="128" height="210"/> </elements> diff --git a/openbis-ipad/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate index 070c80643e794250391abfbf6943e513af08e9e1..5abae2f36f786f03254f5e55b143e0e911cfe294 100644 Binary files a/openbis-ipad/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate and b/openbis-ipad/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate differ 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 e43897e02c1446c33bdd241035ba712e98591e3d..8669d9c6f5033c419fb7a4de69f30c253bf58be8 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/CISDOBOpenBisModel.m b/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m index 4c25449ba290b3b46a981b1051b62897f3df1dbb..e30061c63e0110934fba82d7d219967c3f263aa0 100644 --- a/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m +++ b/openbis-ipad/openBIS/openBIS/CISDOBOpenBisModel.m @@ -41,7 +41,6 @@ _selectedObject = nil; if (self.parentModel) { - self.fetchedResultsController = parentModel.fetchedResultsController; self.managedObjectContext = parentModel.managedObjectContext; } @@ -130,12 +129,8 @@ #pragma mark - Fetched results controller -- (NSFetchedResultsController *)fetchedResultsController +- (void)initializeRootFetchedResultsController { - if (_fetchedResultsController != nil) { - return _fetchedResultsController; - } - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName: @"CISDOBIpadEntity" inManagedObjectContext: self.managedObjectContext]; [fetchRequest setEntity:entity]; @@ -146,7 +141,7 @@ NSArray *sortDescriptors = @[groupSortDescriptor, summaryHeaderSortDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; - NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest managedObjectContext: self.managedObjectContext sectionNameKeyPath: @"group" cacheName: @"Master"]; + NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest managedObjectContext: self.managedObjectContext sectionNameKeyPath: @"group" cacheName: @"Root"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = aFetchedResultsController; @@ -156,6 +151,48 @@ NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } +} + +- (void)initializeChildFetchedResultsController +{ + NSAssert(_parentModel.selectedObject != nil, @"Cannot initialize the model as a child of an existing model."); + NSEntityDescription *entity = [NSEntityDescription entityForName: @"CISDOBIpadEntity" inManagedObjectContext: self.managedObjectContext]; + NSManagedObjectModel *model = [entity managedObjectModel]; + NSDictionary *fetchVariables = + [NSDictionary dictionaryWithObjectsAndKeys: + _parentModel.selectedObject, @"ENTITY", + _parentModel.selectedObject.childrenPermIds, @"CHILDREN", + nil]; + NSFetchRequest *fetchRequest = [model fetchRequestFromTemplateWithName: @"EntityAndChildren" substitutionVariables: fetchVariables]; + + 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: _parentModel.selectedObject.permId]; + 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(); + } +} + + +- (NSFetchedResultsController *)fetchedResultsController +{ + if (_fetchedResultsController != nil) { + return _fetchedResultsController; + } + + if (nil == _parentModel || nil == _parentModel.selectedObject) + [self initializeRootFetchedResultsController]; + else + [self initializeChildFetchedResultsController]; return _fetchedResultsController; }